Php Symfony中的文章分类列表

Php Symfony中的文章分类列表,php,frameworks,symfony1,doctrine,Php,Frameworks,Symfony1,Doctrine,我有一个名为articles的模块,其中显示我上传的文章列表。在索引上,它只是列出了所有的文章 但我想知道我如何才能做到,例如,如果我点击作者,它将带我进入一个页面,该页面只显示该作者的文章(并使url变得非常漂亮,例如:articles/daniel)或其他字段,如发布。很明显,我知道如何进行查询,但我不明白我是应该为这些东西制作新模板,还是只是在索引页上更改参数并检查它们。您可以使用ORM对象路由来实现这一点,只需对您进行最少的编码。我将假设您使用的是条令,但是如果您使用的是推进,那么实现应

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


但我想知道我如何才能做到,例如,如果我点击作者,它将带我进入一个页面,该页面只显示该作者的文章(并使url变得非常漂亮,例如:articles/daniel)或其他字段,如发布。很明显,我知道如何进行查询,但我不明白我是应该为这些东西制作新模板,还是只是在索引页上更改参数并检查它们。

您可以使用ORM对象路由来实现这一点,只需对您进行最少的编码。我将假设您使用的是条令,但是如果您使用的是推进,那么实现应该非常类似(可能只是使用sfPropelRoute作为您的类)。在应用程序的config/routing.yml中添加自定义路由:

author_articles:
  url:   /authors/:author
  param: { module: articles, action: author }
  class: sfDoctrineRoute
  options: { model: Article, type: list }
注意:我使用了URL/authors/而不是您请求的/articles/,因此此路由不会与您的articles模块中的任何操作冲突,但可以在配置中随意使用您喜欢的任何URL

保存这些更改后清除缓存,使Symfony知道新路由。这将告诉你的应用程序获取所有匹配/authors/*的URL,并通过文章模块的author操作传递它们,生成一个与URL中的:author参数匹配的对象列表。对象路由仅通过上面的配置自动完成这一切

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

public function executeAuthor() {
  $this->articles = $this->getRoute()->getObjects();
}
现在,在操作模板的变量中有了查询结果。在authorSuccess.php模板中,按您认为合适的方式遍历$articles数组

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

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


仅此而已。

谢谢您的大力帮助!不过我有一个新问题。鉴于作者姓名或出版物通常不止一个单词或使用不友好的字符,我尝试使用slug代替,但出现了新的错误。我将路由更改为:publication\u articles:url:/publications/:publication\u slug class:sfDoctrineRoute参数:{module:article,action:publication}选项:{model:article,type:list},并在article类中创建了getPublicationSlug()。但我得到了这个错误:“/publications/:publication\u slug”路由缺少一些必需参数(:publication\u slug)。我猜当您得到错误时,您正试图使用该路由生成一个URL,该路由带有URL\u for或link\u to。我唯一一次看到这种情况出现是在使用对象链接时:url_for('my_route',$obj)。我从来没有成功地让它工作过,我尝试过在线指南()中实际工作版本的很多变体。尝试通过直接参数插入链接:“@publication\u articles?publication\u slug=”.$article->getPublicationSlug())的url\u。希望有帮助。