2011-05-10 3 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/actions/actions.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()를 사용하십시오.

관련 문제