2011-05-04 61 views
2

我的第一篇文章,希望它會是對的! =)使用Symfony管理生成器讓用戶管理記錄的子集

我正在使用symfony 1.4和doctrine創建一個網站來管理Web應用程序開發。 我的記錄包含了這個問題的項目和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']))

和路由系統會識別網址:
May 04 14:30:59 symfony [info] {sfPatternRouting} Match route "member_project_feature" (/member/project/:project_id/features.:sf_format) for /member/project/1/features with parameters array ( 'module' => 'memberProjectFeature', 'action' => 'index', 'sf_format' => 'html', 'project_id' => '1',)

但管理髮生器可以」 t使用該prefix_path生成它的模板鏈接,並返回錯誤InvalidArgumentException帶消息「/member/project/:project_id/features/:action/action.:sf_format」路由有一些缺少的必需參數(:project_id)。

任何想法?

回答

3

好吧,我發現我的答案來源與這個網址:http://www.blogs.uni-osnabrueck.de/rotapken/?s=symfony 但是我會在這裏給它,縮短它,因爲,計算器是真棒,應該還有很長一段時間=)

月1日 - 路由配置我在我的問題中使用是有效的。
2日 - 您需要由管理員

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中獲取正確的,但在這裏生成的操作文件添加一個方法是最後一步得到的最終結果,你最想實現:

3 - 由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; 
} 
+0

只是一個快速評論。博客帖子的作者已更新他的帖子,以便創建操作在子控制器中工作... – worenga 2011-05-28 14:09:27

0

我不是100%確定你要在這裏做什麼,但它聽起來像你需要ProjectFeature::toParams方法返回project_id。

+0

您好,我想要在路由中使用:projet_id請確保此admin生成模塊中的每個操作都與url中的project_id指定的項目相關。功能列表將用於此project_id,新功能將用於此project_id。基本上我想要這個管理生成器生成所有的URL:project_id參數 – bksunday 2011-05-04 22:26:41

+0

我試着用toParams方法,它可以爲一個對象生成鏈接,但不適用於集合鏈接,如過濾器或索引。反正它不起作用。也許它與推動一起工作?也許它已被棄用? (http://tohenk.wordpress.com/2009/04/22/using-multiple-primary-keys-in-admin-generator/) – bksunday 2011-05-04 23:18:21