Вы можете использовать маршрут объекта 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 / авторы / вместо запрошенного вами / article /, чтобы этот маршрут не конфликтовал с какими-либо действиями в вашем модуле статей, но вы можете использовать любой URL, который вы предпочитаете в своей конфигурации. .
Очистите кэш после сохранения этих изменений, чтобы Symfony узнал о новом маршруте. Это говорит вашему приложению, чтобы оно взяло все URL-адреса, совпадающие с / author / / *, и передало их через действие author вашего модуля Articles, создавая список объектов, который соответствует параметру: author в URL-адресе. Маршрут объекта делает все это автоматически с помощью только что указанной конфигурации.
Теперь в авторе действия вашего модуля статей добавьте:
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>
Это все, что нужно.