2010-08-10 3 views
0

모델에 연결된 동작이 있는데, 이는 모델의 일부 속성에 따라 다르게 동작해야합니다. 예 : 설정 종속적 인 케이크에 대한 행동

class Airplane extends AppModel { 
    var $actsAs = array('Flying'); 
} 

class FlyingBehavior extends ModelBehavior { 
    function flightTime(&$Model, $distance) { 
     return $distance/$this->speed; 
    } 
} 

처음에 나는

class Airplane extends AppModel { 
    var $actsAs = array('Flying' => 
         array('speed' => SOMENUM) 
       ); 
} 

class FlyingBehavior extends ModelBehavior { 
    function setup(&$Model, $settings) { 
     $this->speed = $settings['speed']; 
    } 

    function flightTime(&$Model, $distance) { 
     return $distance/$this->speed; 
    } 
} 

처럼 설정하지만 각 Airplane 기록에서 speed 열을 가져올 필요할 것 때문에 나는이 일을하는 방법을 모른다 생각했다. 어떻게해야합니까?

답변

0

코드를 afterFind() 콜백에 추가하여 문제를 해결했습니다. 모델에서 속성을 설정합니다.

다음은 동작에서 $Model->property을 통해 액세스해야합니다. 이것은 afterFind()에 간섭하지 않고도 가능해야하지만 불행히도 나는 그것을 할 방법을 찾지 못했습니다.

1

flightTime() 방법을 사용하면 원래 모델에 액세스 할 수 있습니다. 해당 모델 (또는 상위 클래스/상위 클래스)의 모든 속성이나 메서드를 $Model->find(...) 또는 그 밖의 것으로 호출 할 수 있습니다. 이 기술을 사용하여 모델과 관련된 모든 정보를 검색 할 수 있지만 동작이 첨부 된 모든 모델에서 동일한 정보를 사용할 수 있는지 확인하십시오 (또는 최소한 속성/메서드를 사용할 수 있는지 확인하십시오).

+0

이미 가지고있는 데이터에 대해 두 번 쿼리해야하기 때문에 좋은 해결책이 아닙니다. – Aillyn

+0

당신은 이미 그것을 가지고 있습니까? 모델에 대한 완전한 액세스 권한이 있습니다. 모델의 특성으로 저장되어 있다면, 그 모델을 잡을 수 있어야합니다. –

관련 문제