2011-02-11 3 views
2

회사 모델과 회사 컨트롤러가 있다고 가정 해 보겠습니다. 회사 테이블의 외래 키에는 time_zone_id, station_id, state_id, city_id이 포함됩니다.CakePhp - 드롭 다운 목록 - 모든 작업에 대해 find association ('list')을 호출 하시겠습니까?

Companies를 추가, 편집, 조회 할 수있는 Actions가 있습니다. 추가 및 편집하려면 모든 외래 키 조합 (시간대, 주, 도시, 방송국)의 드롭 다운 목록이 필요합니다. 따라서 이러한 작업에, 나 자신이 각 작업에 대해 다음을 많이 쓰는 찾을 :

$this->set('cities', $this->Station->City->find('list')); 
$this->set('states', $this->Station->State->find('list')); 

...

코드 반복의 많은 것 같다. 이 문제를 해결할 더 좋은 방법이 있습니까?

답변

0

은 회사 컨트롤러에 같은 afterFilter로 미리보기 콜백을 추가

afterFilter 모든 회사 컨트롤러 액션 후에 호출됩니다
function afterFilter() { 
    // conditional ensures only actions that need the vars will receive them 
    if (in_array($this->action, array('index', 'view', 'edit'))) { 
     $this->set('cities', $this->Station->City->find('list')); 
     $this->set('states', $this->Station->State->find('list')); 
    } 
} 

.

+0

매우 시원한! 그 덕분에! – djt

+0

실제로이 기능을 시도했지만 작동하지 않았습니다. 그러나 그것은 beforeFilter()와 함께 작동했습니다. 그게 당신이 의미 한 것입니까, 아니면 뭔가 빠져 있습니까? – djt

+0

'afterFilter'를 작성한 것은 제가 생각하기에 그 당시에였습니다.하지만 실제로 미리보기 콜백을 시도하려고했습니다. 나의 주된 의도는 이런 유형의 문제를 도울 수있는 강력한 콜백이 있음을 알려주는 것이 었습니다. 나는 기쁜'beforeFilter'가 당신을 위해 일합니다! – webbiedave

0

필터는 webbiedave의 답변처럼 좋지만, 많은 조건부 논리로 끝나면 복잡해질 수 있습니다.

또 다른 옵션은 액션/뷰로 의도되지 않은 컨트롤러에서 메소드를 정의 할 수 있다는 것입니다. 일반적인 PHP 객체입니다. 그런 다음 전화

private function _populate_dropdowns() { 
    $this->set('cities', $this->Station->City->find('list')); 
    $this->set('states', $this->Station->State->find('list')); 
} 

: PHP5를 사용하는 경우 더 나은 아직, 당신은

예를 들어, 컨트롤러에 다음과 같이 정의 할 수 있습니다 ... 그들은 행동에 대한 오해가 될 수 없습니다 보장하기 위해 개인이 방법을 선언 할 수 있습니다 그것을 필요로하는 어떤 행동이라도 시작할 때 :

public function add() { 
    $this->_populate_dropdowns(); 
    // ... 
    // add code 
} 

public function edit() { 
    $this->_populate_dropdowns(); 
    // ... 
    // edit code 
} 
+0

그래, 이것에 대해 생각했습니다. 그리고 나서 두 가지 아이디어를 결합하는 것을 고려했습니다 : 개인적인 방법을 만들지 만 beforeFilter()에서 호출하십시오. – djt

+0

그것도 효과가 있습니다. :) 간단하게 얼마나 자주 코드가 필요한지에 관해서입니다. beforeFilter는 모든 요청과 함께 실행되므로 대부분의 요청에서 필요하다고 생각되면 적절하다고 판단됩니다. – Botman