Admin jeneratör tarafından üretilen yönetici sayfalarıyla etkileşimleri ekleme

1 Cevap php

Ben bir web sitesi oluşturmak için (uskur ORM ile) Symfony 1.2.9 kullanıyorum. Ben yönetici işlevselliğini uygulamak için yönetici jeneratör kullanarak başladı.

Ancak hafif bir 'sorun' rastlamak var. Benim modelleri (: N ilişkiler ve N: N ilişkileri, örneğin bir tablo birkaç 1 olabilir) ilişkilidir. Ben tatmin edici Henüz bu adrese bir yol bulmuş değil. (Liste görünümleri için) bir taktik çözüm olarak, ben sadece ana nesneyi göstermek için karar verdi, ve sonra ilgili nesneleri göstermek için etkileşimleri eklemek var.

Ben bunu açıklamak için bir blog modelini kullanacağız.

Burada bir blog model için ilişkiler şunlardır:

N:M relationship with Blogroll (models a blog roll) 1:N relationship with Blogpost (models a post submitted to a blog)

Birisi nezaketini sürece - Ben aslen AJAX kullanarak, seçili bir blog için (disk belleği) blogpost listesi, görüntüleme, ama olduğu gibi ben yönetici jeneratör ile yeterince mücadele ediyorum amacı vardı, bu yüzden ben bu fikri rafa var Bu nasıl biraz ışık tutacak.

Bunun yerine, ne şimdi (bir taktik / geçici çözelti gibi) yapıyorum, ben bir kullanıcı izin liste görünümüne etkileşimleri eklemiş olduğunu:

  1. View a list of the blog roll for the blog on that row

  2. Bu satır üzerinde blog için mesajların bir listesini görüntüleme

  3. Tha satırda blog için bir yazı ekle

Yukarıdaki tümünde, temelde incelikleri eylem (oluşturulan yönetici) isteği iletecek eylemleri yazdım. Ancak, doğru blog rulo ya da post blog listesi vb döndürülür, böylece (blog id vb gibi) bazı parametreler geçmek gerekir.

Ben ne yapmak istediğinizi yapmanın daha iyi bir yolu vardır eminim, ama durumda benim sorular şunlardır yoktur:

  1. How may I obtain the object that relates to a specific row (of the
    clicked link) in the list view (e.g. the blog object in this example)

  2. Once I have the object, I may choose to extract various fields: id etc. How can I pass these arguments to the admin generated action ?

İkinci soruya gelince, benim tahminim (yanlış olabilir) bu bunu yapmak için bir yol olabilir yani

public function executeMyAddedBlogRollInteractionLink(sfWebRequest $request)
{
     // get the object *somehow* (I'm guessing this may work)
     $object = $this->getRoute()->getObject();

     // retrieve the required parameters from the object, and build a query string
     $query_str=$object->getId();

     //forward the request to the generated code (action to display blogroll list in this case)
     $this->forward('backendmodulename',"getblogrolllistaction?params=$query_string");
}

Bu kesmek bir bit gibi hissediyor, ama ben bu konuda gitmek için başka nasıl emin değilim. Ben de params'ı gönderme bulunmaya hevesli değilim (ne bir tarayıcı istekleri yapıyor görmek oldukça sraightforward olduğu bir GET User_id vb içerebilir, hatta bir POST, o kadar güvenli değildir). 1 veya daha fazla M nesneler için gerekli olan yönetim, bu tür uygulamak için yukarıdaki önermek ne daha iyi bir yolu var ise: N ilişkiler, ben bu konuda giderek "önerilen" bir şekilde duymak çok mutluluk duyacağız.

Ben iç gibi belirli eylemleri işaretleme okumayı unutmayın. yani çağrılabilir sadece app içinde. Ben bu durumda yararlı olacaktır acaba?

1 Cevap

Ben uygulama backend denir varsayarak yaşıyorum. Iki model, BlogPost ve BlogPostComment olduğunu varsayalım. Bu Blog_Post ve blog_post_comment denilen yönetici oluşturulan modülleri kullanılarak yönetilir.

Ben her BlogPost karşı bir bağlantı backend.php / Blog_Post de liste sayfasında görüntülenmesini istediğiniz inanıyorum. Bağlantıları sadece ilgili BlogPost ile ilgili açıklamaları göstermelidir / blog_post_comment, backend.php almak.

Apps / backend / Blog_Post / şablonları altında, _commentslink.php adında bir dosya oluşturun ve bu koymak:

<a href="<?php echo url_for('blog_post_comment_collection', array('action' => 'filter', 'blog_post_comment_filters[blogpost_id]'=>$blog_post->getId())) ?>">View Comments</a>

Sonra apps / backend / Blog_Post / config / generator.yml, sen liste görünümü için alanlarda bu kısmi eklemeniz gerekir:

....
param:
  config:
    list:
      display: [ id, title, _commentslink ]

_commentslink Not - _ yerine modelinde alan arıyorum kısmi kullanmak söyler. Sizin nesne model> dolar

Esasen, bütün bu yöntem normalde blogpost_id tarafından bu filtre yapmak için buna uygun koşul geçen gider yorumları listesinde filtre olarak aynı eylem bağlantıları olduğunu gelmez.

Eğer arka uç etkin CSRF koruması var ise, bunu devre dışı bırakmanız gerekir, ya da bu yöntem işe yaramaz. Bu uygulamalar / backend / config / settings.yml ayarlanır. Csrf_secret denilen Orada bir ayar var olacak - CSRF devre dışı bırakmak için yanlış ayarlanmış olmalıdır.

N biçimlerde ilişkiler: 1 için desteğe ihtiyacınız varsa dışarı symfony 1.3/1.4 denemelisiniz. 1.3 benim deneyim 1.2.x gelen nispeten sorunsuz yükseltme - 1.4 aynıdır, ama kaldırıldı artık kullanılmayan özelliklere sahip.