2011-03-08 2 views
8

다른 답변 (like this)으로 인해 나는 CakePHP 1.3에서 사용해야 할 것이 무엇인지 명확히하고 싶습니다.App :: import ('Model', ...) 또는 ClassRegistry (...)를 사용해야합니까?

는 특히, 난 등 모델이 다른에 의존하는 나는, 다른로드하고 싶은 정보와 몇 가지 물건을 할 거라고 그 모델의 방법에서, 그래서 호출하는 상황

documentation for the App Class이 says :

이전 버전에서는로드하려는 클래스 유형에 따라 필요한 클래스를로드하기위한 여러 가지 기능이있었습니다. 이 함수는 더 이상 사용되지 않으며 모든 클래스 및 라이브러리로드는 App :: import()를 통해 수행되어야합니다.

나는이 등 ClassRegistry의 사용을 포함 있으리라 믿고있어, 그러나 명확하게하기에 그냥 원하고, 특정 :

내가 서로 모델, 또는 뭔가를 활용하는 App::import('Model', ...)를 사용해야 ? 뭔가 다른 거라면 뭐라구?

+0

내가 배후에서 수정을 언급 할 수 없기 때문에 나는 궁금해 할 것 같았다. 나는 질문을 분명하게하는 것이 중요하다는 것을 이해하고 StackOverflow에 온다. 엔진)를 사용하여 미래에 쉽게 질문을 찾을 수 있습니다. 제목에 내 * 버전 특정 질문을 분명히하는 것은 그러한 경우에 완벽하게 이해되는 것 같습니다. 나는 편집에 동의하지 않는다. 그러나 나는 당신이 가고있는 것을 보았고 그것을 놓아 줄 것이라고 생각한다. 태그 -vs-title이 어딘가에 놓친 가이드 라인에 설명되어 있습니까? –

답변

13

심지어 이년 2008 년 이후, 가장 좋은 방법은 인용 된 문서에도 불구하고, ClassRegistry::init()를 사용하는 것으로 나타납니다.

이것은 특정 클래스/메소드에 대한 실제 API/문서에서 분명하게 알 수 있습니다.

App::import()

는 검색 $ 이름이나 특정 파일 (들)을 기반으로 클래스를 찾습니다. App :: import()를 호출하면 파일에 포함 된 클래스가 생성되지 않습니다. 파일을 찾고 require() 만합니다.

ClassRegistry::init()

로드하는 클래스는 레지스트리에서 객체를 등록하고 개체의 인스턴스를 반환합니다.

예제 간단한 사용 : Post 모델 인스턴스 가져 오기 ClassRegistry :: init ('Post');

당신도 API 문서가 App::import 반대 (어느 않습니다 훨씬 적은), 그리고 CakePHP의에서 변경된 표현에도 불구하고 "로, 당신을 위해 그 (것)들을 인스턴스화 모델을로드 ClassRegistry 사용 예제를 지적 볼 수 있듯이 책 "문서.

-2

$this->loadModel('model name')은 컨트롤러 전체를 필요로하지 않는 한 할 것입니다. 그런 다음 hasone, belongssto ...와 같은 모델에서 관계를 정의하고 $this->model->model2을 호출하십시오. 그런 다음 모델을 관련시킬 수 있다면

+0

저는 현재 컨트롤러에 없습니다. Model-B의 메소드 내에서 Model-A를 활용하고 있습니다. –

+1

cakePHP 2에서 사용 중지됨! – FAjir

7

는 가장 좋은 방법은 동적

$this->bindModel("hasOne" => array("Model2")) 사용하여 관계를 결합하는 것입니다.

당신은 모델 관련이 없습니다 당신은 당신이 당신이 시도해야하는 여러 발생에 사용하려는 경우 다음

ClassRegistry::init('Model2')->find('allThatIWant');

를 사용할 수있는 하나 개의 발생의 두 번째 모델을 사용하려면

$this->model2 = & ClassRegistry::init('Model2') 
$this->model2->find('allThatIWant'); 
+1

plz'App :: import()'가 최악의 방법이라는 것을 기억하십시오. 마지막 시도 인 경우에만 사용하십시오. – RSK

+0

좋아, 이제 나는 더욱 궁금해. 이것은 1.3 절의 문서조차도 모델 내에서 모델에 액세스하는 "다른 옵션"을 제거하고 App :: import()를 제안했기 때문에 메일 링리스트 또는 다른 항목에서 일반적으로 논의되고 있습니까? 문서에서? 당신의 답변과 당신의 도움에 감사드립니다! –

+1

이 게시물의 의견을 확인하십시오. http://nuts-and-bolts-of-cakephp.com/2008/12/16/how-to-build-a-dashboard-for-your-application-in-cakephp/ – RSK

2

2.6.x부터는 여전히 ClassRegistry :: init()입니다.

큰 차이가 있습니다. App :: import는 단지 그것을 포함/요구할 것입니다. 반면에 ClassRegistry::init()은 모델을 인스턴스화하고 완전히로드 된 모델 객체를 가져옵니다.

예를 들어, AppController의 beforeFilter에 모델을로드했습니다. $ this-> Model -> __ something을 사용하여 사용자 정의 속성을 추가합니다. 이제, 예를 들어 비헤이비어와 같이 $ controller 객체를 사용할 수없는 곳에서 ClassRegistry :: init ('Model')을 호출합니다. ClassRegistry :: init ('Model')에 의해 반환 된 객체에는 사용자 정의 속성 $ this-> Model -> __ something이 있습니다.

Btw, $ controller-> loadModel()은 예를 들어 구성 요소에 $ 컨트롤러 개체를 사용할 수있는 모델을로드하는 가장 이상적인 방법입니다.

관련 문제