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

标签 symfony1 symfony-1.4

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

我正在创建一个网站来使用 symfony 1.4 和原则来管理 Web 应用程序开发。 我的记录包括 Project 和 ProjectFeatures 的这个问题

现在我想做的是使用管理生成器让用户通过一个链接来管理一个项目的功能,该链接通过project_id 限制所有返回的功能,如下所示:http://mysite/member/project/:project_id/features

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

member_project_feature:  
  class: sfDoctrineRouteCollection  
    options:
      model:                ProjectFeature
      module:               memberProjectFeature
      prefix_path:          /member/project/:project_id/features
      with_show:            true
      column:               id
      with_wildcard_routes: true

project_id 是模型 ProjectFeature 中的现有列,
我将使用自定义查询仅通过该project_id 检索功能。

现在我可以使用以下方法生成链接到该管理生成器模块的 url,不会出现错误:
url_for('member_project_feature', array('project_id' => $project['id']))

路由系统确实可以识别该 url:
May 04 14:30:59 symfony [info] {sfPatternRouting} 将/member/project/1/features 的路由“member_project_feature”(/member/project/:project_id/features.:sf_format)与参数数组(' module' => 'memberProjectFeature', 'action' => 'index', 'sf_format' => 'html', 'project_id' => '1',)

但是管理生成器无法使用该 prefix_path 在其模板内生成链接,并返回错误 InvalidArgumentException 并显示消息 The "/member/project/:project_id/features/:action/action.:sf_format"路由缺少一些强制参数 (:project_id)。

有什么想法吗?

最佳答案

嗯,我在这个网址找到了答案:http://www.blogs.uni-osnabrueck.de/rotapken/?s=symfony 但我会在这里给出它并缩短它,因为 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 已正确生成,但这是获得您最可能想要实现的最终结果的最后一步:

第三 - 要按project_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;
 } 

关于symfony1 - 使用 Symfony 管理生成器让用户管理记录的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5888257/

相关文章:

sql - 在 doctrine 和 symfony 中将 '' 转换为 NULL

mysql - 如何创建 NOT IN where 子句 Doctrine 查询?

php - 交响乐 : sfDoctrineRoute pass additional Parameter

php - 如何将自定义行为添加到 symfony 缓存 :clear?

logging - symfony 中的多个日志文件

symfony1 - Symfony框架投票系统

forms - Symfony 设计问题 - 我如何在应用程序之间共享表单?

php - 为什么我在 Symfony 1.2 上用 Doctrine 保存一个 "validator failed"?

php - 如何用 Doctrine 查询 NOT NULL?

php - 对齐标签字段 symfony