2012-11-13 2 views
2

최근에 케이크 1.3.x에서 케이크 2.x로 앱을 업그레이드했습니다. 이제는 일부 기능에서 모델을 사용하는 도우미가 있습니다. 처음 로딩 모델 구문 (1.3.x 버전 근무) 한 도우미에서 모델 사용 - CakePHP 2.x

 App::import('Model', $modelName); 
    $modelObject = &ClassRegistry::getObject($modelName);  
    $modelObject->find() 

는 지금은,이 변환이 작동하지 않습니다되어

App::uses($modelName,'Model'); 
    $modelObject = &ClassRegistry::getObject($modelName); 
    $modelObject->find() 

문제를 다음으로 변경되었습니다. 아무도 내가 잘못하고 있다고 말할 수 있습니까? 미리 감사드립니다.

PS : 오류 메시지는 다음과 같습니다 아닌 객체의 멤버 함수 발견()에
전화가

+2

문제 해결 것입니다 희망

$this->loadModel(ModelName); 

그냥'$ 사용자 = ClassRegistry :: init ('User')' – mark

답변

6

작업 코드는

//let $modelName be User 
App::import("Model", "User"); 
$model = new User(); 
$model->find("list"); 

해야 난이 어떤 가난한 사람을 도움이되기를 바랍니다

+3

도우미에서 모델을 사용하면 MVC가 중단되므로 정답은 "You do not"여야합니다. 사용자 목록은 컨트롤러에서 오히려 정의 된 다음보기에서만 사용해야합니다. – nIcO

+1

@nIcO MVC에 대해 잘 알고 있지만 가끔씩 우리는 더 나은 이해를 위해 사용자에게 관련 데이터로 일부 ID 등을 표시해야 할 때가 있습니다 ... 이것은 이러한 상황 중 하나입니다. 어쨌든 당신의 도움에 감사드립니다. –

0

도우미에서 모델을로드 할 수 있으며 도우미 클래스에서 다음 메소드를 추가 할 수 있습니다.

1 단계 :

public function loadModel($modelClass = null, $id = null) { 
    if ($modelClass === null) { 
     $modelClass = $this->modelClass; 
    } 

    $this->uses = ($this->uses) ? (array) $this->uses : array(); 
    if (!in_array($modelClass, $this->uses, true)) { 
     $this->uses[] = $modelClass; 
    } 

    list($plugin, $modelClass) = pluginSplit($modelClass, true); 

    $this->{$modelClass} = ClassRegistry::init(array(
       'class' => $plugin . $modelClass, 'alias' => $modelClass, 'id' => $id 
    )); 
    if (!$this->{$modelClass}) { 
     throw new MissingModelException($modelClass); 
    } 
    return true; 
} 

2 단계 :이 같은 컨트롤러에서와 같은 방법 위의 호출 :이 올바른 구문은 언제나

관련 문제