2013-07-01 48 views
0

我試圖在任務doctrine:generate-admin生成的模塊中向updatedelete操作添加一些額外的邏輯。我讀了here,看到我可以在/application/mymodule/actions/actions.class.php中創建executeUpdate()executeDelete()方法。因爲executeUpdate()調用proccessForm()方法,那麼我認爲最好的是覆蓋這個而不是executeUpdate(),但不知道如何。我需要添加的代碼是這樣的:如何覆蓋管理髮生器中的processForm()

$q = Doctrine_Core::getTable('SdrivingEmpresa') 
      ->createQuery('a') 
      ->where('idempresa = ?', $request->getParameter('idempresa')) 
      ->execute(); 
$file = new sfFilesystem(); 
$file->remove(sfConfig::get('sf_upload_dir') . '/' . $q[0]->getLogotipo()); 

我這樣做是爲executeDelete()通過複製產生的高速緩存編碼,寫我的邏輯見下圖:

public function executeDelete(sfWebRequest $request) { 
    $request->checkCSRFProtection(); 
    $this->dispatcher->notify(new sfEvent($this, 'admin.delete_object', array('object' => $this->getRoute()->getObject()))); 

    $q = Doctrine_Core::getTable('SdrivingEmpresa') 
      ->createQuery('a') 
      ->where('idempresa = ?', $request->getParameter('idempresa')) 
      ->execute(); 
    $file = new sfFilesystem(); 
    $file->remove(sfConfig::get('sf_upload_dir') . '/' . $q[0]->getLogotipo()); 

    if ($this->getRoute()->getObject()->delete()) { 
     $this->getUser()->setFlash('notice', 'The item was deleted successfully.'); 
    } 
    $this->redirect('@sdriving_empresa'); 
} 

但我艱難的,這是不對的,所以我的問題是,我應該這樣做與processForm()或存在一個更好的方式來做到這一點?任何建議或幫助?

+0

您應該使用模型對象上可用的生命週期事件。你可以添加像preDelete,postDelete,preUpdate,postUpdate,preSave,postSave,preInsert,postInsert這樣的函數。你可以添加任何應該與給定事件關聯的邏輯。 –

回答

0

您可以將應用程序緩存中生成的proccessForm()複製到管理模塊操作中,以覆蓋它。