Symfony1 使用Symfony管理生成器让用户管理记录的子集

Symfony1 使用Symfony管理生成器让用户管理记录的子集,symfony1,symfony-1.4,Symfony1,Symfony 1.4,我在这里的第一篇文章,希望它是正确的!=) 我正在创建一个网站,使用symfony 1.4和doctrine管理web应用程序开发。 我的记录包括这个问题的项目和项目特征 现在我想做的是使用管理生成器让用户通过一个链接管理一个项目的功能,该链接通过项目id约束所有返回的功能,如下所示: 在我的routing.yml配置中,我有: 项目id是模型项目功能中的现有列, 我将使用自定义查询仅通过该项目id检索要素 现在,我可以使用: url\u用于('member\u project\u featur

我在这里的第一篇文章,希望它是正确的!=)

我正在创建一个网站,使用symfony 1.4和doctrine管理web应用程序开发。 我的记录包括这个问题的项目和项目特征

现在我想做的是使用管理生成器让用户通过一个链接管理一个项目的功能,该链接通过项目id约束所有返回的功能,如下所示:

在我的routing.yml配置中,我有:

项目id是模型项目功能中的现有列,
我将使用自定义查询仅通过该项目id检索要素

现在,我可以使用:
url\u用于('member\u project\u feature',array('project\u id'=>$project['id'))

而且路由系统确实识别url:
May 04 14:30:59 symfony[info]{sfPatternRouting}为/member/project/1/带有参数数组的功能('module'=>'memberProjectFeature','action'=>'index','sf_format'=>'html','project_id'=>'1',)匹配路由“member_project_feature”(/member/project/:project_id/features.)

但是管理生成器无法在其模板内生成带有前缀路径的链接,并返回错误InvalidArgumentException,消息为“/member/project/:project\u id/features/:action/action.:sf\u format”路由缺少一些必需参数(:project\u id)。


有什么想法吗?

我不能100%确定您在这里要做什么,但听起来您需要使用
ProjectFeature::toParams
方法返回项目id。

我在以下url找到了我的答案: 但我会把它放在这里,并缩短它,因为stackoverflow非常棒,它应该在那里呆很长时间=)

第一-我在问题中使用的路由配置有效。
第二,您需要在管理员生成的操作文件中添加一个方法

public function execute($sfRequest)
{
  // taken from http://www.blogs.uni-osnabrueck.de/rotapken/?s=symfony
  $this->forward404Unless(
    $project_id = $sfRequest->getUrlParameter('project_id'));

   $this->forward404Unless(
     $this->project = Doctrine::getTable('ttcWebProject')->find($project_id));

   $this->getContext()->getRouting()
     ->setDefaultParameter('project_id', $project_id);

   if ($id = $sfRequest->getUrlParameter('id'))
   {
     $this->getContext()->getRouting()->setDefaultParameter('id', $id);
   }

   $result = parent::execute($sfRequest);

   return $result;
 }
此时会正确生成url,但这是实现最终结果的最后一步:

第三-要按项目id获取列表,我可以在generator.yml中提供一个表方法、getFilterDefaults的默认值或在操作文件中提供此方法:

protected function buildQuery ()
{
  $q = parent::buildQuery();
  $rootAlias = $q->getRootAlias();
  $q->andWhere("{$rootAlias}.project_id = ?", 
    $this->getRequest()->getUrlParameter('project_id'));

   return $q;
 } 

您好,我想在路由中使用:projet_id以确保此管理员生成的模块中的每个操作都与url中的:project_id指定的项目相关。功能列表将用于此项目\u id,新功能将用于此项目\u id。基本上,我希望此管理生成器使用:project\u id参数生成所有URL,我尝试了toParams方法,它可以用于为一个对象生成的链接,但不适用于集合链接,如筛选器或索引。无论如何,它都不起作用。也许它和推进一起工作?也许它被弃用了?我只是简短的评论。博客帖子的作者已经更新了自己的帖子,所以创建动作可以在分包商中运行。。。
protected function buildQuery ()
{
  $q = parent::buildQuery();
  $rootAlias = $q->getRootAlias();
  $q->andWhere("{$rootAlias}.project_id = ?", 
    $this->getRequest()->getUrlParameter('project_id'));

   return $q;
 }