显示与Symfony 1.2.9管理生成器的1:N和M:N关系

时间:2009-12-14 22:52:50

标签: symfony1

我正在使用Symfony 1.2.9(使用Propel ORM)来创建网站。我已经开始使用管理生成器来实现管理功能。我遇到各种各样的问题让管理员显示一个对象(博客),该对象有一个1:N关系(blogposts)和一个N:M关系(blogroll)。

事实证明这比我想象的要困难得多(我敢说,而不是它需要)。我已经花了两天时间解决这个问题并且没有取得多大进展。我正在尝试为博客生成管理功能。

我发布了我的架构here的精简版。希望它有助于澄清我遇到的问题(也许我不能清楚地解释问题 - 但希望模式应该澄清我面临的问题,以及我正在尝试做的事情)。

一个博客有0到1个博客卷,附有0到N个博客帖子。每篇博文都附有0到M条评论。目前,我可以查看博客列表。但我想添加两个可以让我的交互(或链接):

  1. 查看blogroll(这是附加到博客的博客列表)
  2. 查看附加到博客的博客帖子列表。
  3. 当显示博客帖子列表时,我希望链接显示链接(与之前相同的功能),这样我就可以显示所选博客帖子的评论列表。

    我确信我不是第一个(或唯一)尝试过这样做过的人。我是否采用了错误的方式,对于具有这种关系的对象,是否有更好的(即用户更多的直觉)方式显示和执行CRUD?任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

你为什么不这样做,就像你在另一个问题上提出的那样。

(这又是Doctrine,但对于Propel,它应该是相似的)。

generator.yml

中创建对象操作
list:
    object_actions:
      bloglist: {label: Bloglist}

然后在你的actions.class.php中你必须添加一个函数:

public function executeListBloglist(sfWebRequest $request) {
    $blog = $this->getRoute()->getObject();

    // retrieve the blogposts via a PEER method (I don't have any clue about Propel ;))
    $this->blogposts = however.you.get.the.blogposts();
}

然后创建一个模板bloglistSuccess.php,您可以在其中显示帖子。

或者,如果您有这样的模块,您可以重定向或转发到博客帖子的管理模块。您可能会覆盖列表操作以接受博客的ID参数,并扩展查询以按此博客ID过滤帖子。
做重定向或转发没有错,它不是黑客;)


评论后编辑:

我还建议您转发请求 不,您不必更改路由,您可以像您建议的那样附加参数。

为了覆盖,我重新考虑如果你再次覆盖buildQuery方法会更好。 (我不记得如何用Propel调用这个方法,我希望你明白我的意思。)

所以它看起来像这样:

class blogpostAdminActions extends autoBlogpostAdminActions 
{

  //...

  protected function buildQuery()
  {
     $query = parent::buildQuery();

     $request = $this->getRequest(); // <- I am not sure about this method call but there is one that gives you the webRequest.

     if ($request->hasParamter('blog_id'))
     {
        $query->andWhere('blog_id = ?', $request->getParameter('blog_id'));
     }

     return $query;
  }
}

当然你必须将其改为Propel标准,但我认为你可以做到这一点;)
希望这会对你有所帮助。