2011-05-10 55 views
1

可以使用table_method選項更改用於管理生成器配置中的列表操作的查詢。例如,限制symfony管理生成器中可用於所有操作的對象

# apps/backend/modules/job/config/generator.yml 
config: 
    list: 
    table_method: retrieveBackendJobList 

但我想限制在管理生成的所有的行動。特別是,我想將所有對象顯示,編輯,刪除等限制爲具有特定屬性的對象,這些屬性可能取決於當前的一週中的某一天或某一天的時間。

我不想重寫模型類,因爲對於其他應用程序,我希望限制不同(或者根本沒有限制)。

哪裏(即哪些文件)以及如何進行此更改?

回答

1

可能通過table_method和generator.yml功能添加和刪除操作按鈕,您已經負責自定義索引(即列表)操作。

對於其他操作,您可能希望在這些自定義查詢的模型中創建其他方法。但是覆蓋默認行爲的地方在模塊的actions.class.php文件中。

所以在你的例子中,你需要編輯apps/backend/modules/job/actionscript/action.class.php文件,併爲每個需要修改的動作編寫自定義代碼。

因此,例如,你可以改變刪除行爲是這樣的:

# apps/backend/modules/job/actions/actions.class.php 
require_once dirname(__FILE__).'/../lib/jobGeneratorConfiguration.class.php'; 
require_once dirname(__FILE__).'/../lib/jobGeneratorHelper.class.php'; 

class jobActions extends autoJobActions 
{ 
    /** 
    * Override standard delete action. 
    * @param sfWebRequest $request A request object 
    */ 
    public function executeDelete(sfWebRequest $request) { 
    if ($some_custom_condition) { 
     $job = Doctrine_Core::getTable('job')->find($request->getParameter('id')); 
     $job->delete(); 
     $this->getUser()->setFlash('notice', 'Record deleted.'); 
     return sfView::SUCCESS; 
    } else { 
     $this->getUser()->setFlash('error', 'You do not have permission to do that.'); 
     return sfView::ERROR; 
    } 
    } 
} 
1

使用路由爲。這將確保所有操作都有一個對象查詢方法。

job: 
    class: sfDoctrineRouteCollection 
    options: 
    model: Job 
    module: job 
    with_wildcard_routes: true 
    model_methods: 
     object: getActiveJob 

class JobTable extends Doctrine_Table 
{ 
    public function getActiveObject($params) 
    { 
    $q = $this->createQuery('j') 
     ->where('j.id = ?', $params['id']) 
     ->addWhere('j.is_active = ?', true) 
    ; 

    return $q->fetchOne(); 
    } 
} 

在您的自定義操作中,使用$ this-> getRouting() - > getObject()來使用此方法。

相關問題