在Symfony中对文章列表进行排序

时间:2010-01-07 21:31:24

标签: php frameworks symfony1 doctrine

我有一个名为articles的模块,我在其中显示我上传的文章列表。在索引上,它只列出了所有文章。

但我想知道我是如何做到这一点的,所以如果我点击作者,例如,它会带我到一个页面,只显示该作者的文章(并使网址非常好:文章/丹尼尔)或通过不同的领域,例如出版物。我知道如何明确地进行查询,但我不明白我是否应该为这些事情制作新模板,或者只是更改索引页面上的参数并检查它们。

1 个答案:

答案 0 :(得分:3)

您可以使用ORM对象路由来实现此目的,只需最少的编码。我将假设你是在Doctrine,但如果你在Propel上,那么实现应该非常相似(可能只是使用sfPropelRoute作为你的类)。在您的应用程序的config / routing.yml中添加您的自定义路由:

author_articles:
  url:   /authors/:author
  param: { module: articles, action: author }
  class: sfDoctrineRoute
  options: { model: Article, type: list }

注意:我使用了URL / authors /而不是您要求的/ articles /,因此这条路线不会与文章模块中的任何操作冲突,但可以随意使用您在配置中喜欢的任何网址

保存这些更改后清除缓存,以使Symfony了解新路由。这样做会告诉您的应用程序将所有URL匹配/ authors / *并通过您的文章模块的作者操作传递它们,生成与URL中的:author参数匹配的对象列表。对象路由仅使用上面的配置自动执行此操作。

现在,在文章模块的作者操作中添加:

public function executeAuthor() {
  $this->articles = $this->getRoute()->getObjects();
}

现在,您将查询结果包含在操作模板的变量中。在您的authorSuccess.php模板中,根据您的需要循环遍历$ articles数组。

要使用作者姓名从主列表链接到此路线,您可以将url_for帮助器与您刚刚创建的路径一起使用,以动态生成完整的URL:

<a href="<?php echo url_for('@author_articles?author=' . $article['author']) ?>"><?php echo $article['author'] ?></a>

这就是它的全部内容。