Adding interactions to admin pages generated by the admin generator

Posted by Stick it to THE MAN on Stack Overflow See other posts from Stack Overflow or by Stick it to THE MAN
Published on 2009-12-13T17:35:11Z Indexed on 2010/03/23 1:01 UTC
Read the original article Hit count: 372

Filed under:
|

I am using Symfony 1.2.9 (with Propel ORM) to create a website. I have started using the admin generator to implement the admin functionality.

I have come accross a slight 'problem' however. My models are related (e.g. one table may have several 1:N relations and N:N relations). I have not found a way to address this satisfactorily yet. As a tactical solution (for list views), I have decided to simply show the parent object, and then add interactions to show the related objects.

I'll use a Blog model to illustrate this.

Here are the relationships for a blog model:

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

I had originally intended on displaying the (paged) blogpost list for a blog,, when it was selected, using AJAX, but I am struggling enough with the admin generator as it is, so I have shelved that idea - unless someone is kind enough to shed some light on how to do this.

Instead, what I am now doing (as a tactical/interim soln), is I have added interactions to the list view which allow a user to:

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

  2. View a list of the posts for the blog on that row

  3. Add a post for the blog on tha row

In all of the above, I have written actions that will basically forward the request to the approriate action (admin generated). However, I need to pass some parameters (like the blog id etc), so that the correct blog roll or blog post list etc is returned.

I am sure there is a better way of doing what I want to do, but in case there isn't here are my questions:

  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 ?

Regarding the second question, my guess is that this may be the way to do it (I may be wrong)

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");
}

This feels like a bit of a hack, but I'm not sure how else to go about it. I'm also not to keen on sending params (which may include user_id etc via a GET, even a POST is not that much safer, since it is fairly sraightforward to see what requests a browser is making). if there is a better way than what I suggest above to implement this kind of administration that is required for objects with 1 or more M:N relationships, I will be very glad to hear the "recommended" way of going about it.

I remember reading about marking certain actions as internal. i.e. callable from only within the app. I wonder if that would be useful in this instance?

© Stack Overflow or respective owner

Related posts about symfony

Related posts about php