Почему бы вам не сделать это, как вы сами предложили в своем другом вопросе.
(Это опять-таки для 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
, в котором вы показываете сообщения.
Или вы можете перенаправить или переслать в модуль администратора для постов блога, если у вас есть такой модуль. Там вам, вероятно, придется переопределить действие списка, чтобы принять параметр идентификатора блога и расширить запрос для фильтрации сообщений по этому идентификатору блога.
Нет ничего плохого в том, чтобы сделать редирект или переадресацию, это не хак;)
Редактировать после комментария:
Я бы также предложил вам переслать запрос.
Нет, вам не нужно менять маршрут, вы можете просто добавить параметр, как вы предложили.
Для переопределения я пересмотрел, что было бы лучше, если бы вы переопределили метод 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, но я предполагаю, что вы можете сделать это;)
Надеюсь, это поможет вам.