我有一个名为articles的模块,我在其中显示我上传的文章列表。在索引上,它只列出了所有文章。
但我想知道我是如何做到这一点的,所以如果我点击作者,例如,它会带我到一个页面,只显示该作者的文章(并使网址非常好:文章/丹尼尔)或通过不同的领域,例如出版物。我知道如何明确地进行查询,但我不明白我是否应该为这些事情制作新模板,或者只是更改索引页面上的参数并检查它们。
答案 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>
这就是它的全部内容。