2010-12-14 4 views
3

젠드 프레임 워크에 대해 문서화하기 시작했습니다. 젠드 프레임 워크를 곧 상용화하기 시작할 것입니다. 내가 모델을 사용하고 작업하기 전까지 모든 것이 잘 작동했다. :).젠드 프레임 워크 모델 위치 및 자동 로딩

Zend 권장 사항에 따라 모델의 기본 위치는 application/models/DbTable이며 모든 모델이 포함됩니다.이 위치에서는 Application_Model_DbTable_Actors과 같은 모델 이름을 지정해야합니다. 나를 위해, 이것은 모델을위한 아주 긴 이름이고 사용하기 쉬운 것은 아닙니다.

내가 가져올 디렉토리 구조는 다음과 같이 보입니다 :

application/ 
    models/ 
    actors/ 
     ActorsMapper.php 
     Actor.php 
    books/ 
     BooksMapper.php 
     Book.php 

그래서 내 모든 모델은 models 디렉토리 아래에있는 것,하지만 자신의 디렉토리에 그룹화합니다.

각 클래스의 이름은 ActorsMapper 또는 Actor이어야합니다 (이 둘은 모두 Zend_Db_Table 또는 Zend_Db_Row까지 확장됩니다).

사실 제 컨트롤러에서 $actors = new ActorsMapper()과 같은 것을 사용하여 모델을 인스턴스화하면 나는 Fatal error: Class not found을 얻을 것이고, 왜 내가이 문제에 도움을 요청하고 있는지 알고 있습니다.

내가 include_path를 내 models 디렉토리를 추가하려고이 문제를 해결하기 위해 :

  • 먼저

을 application.ini하는 includePaths.models = APPLICATION_PATH "/models"을 추가하려고하지만,이 사람은 '아무튼 포함 경로에 추가하십시오.

  • 초 시도는 :

    는 명시 적으로이 포함 된 것들 중 그 경로를 추가하는 경우에도 set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));

하지만, 오류가 계속 사용하여 경로를 추가했다.

이 모델의 official documentationZend_Db_Table입니다. 그러나 모델을 자동로드하는 것과 관련된 항목을 찾을 수 없습니다.

모든 솔루션을 제공해 주셔서 감사합니다.

p.s. 젠드 프레임 워크 버전은 1.11.1

+0

오토로더를 파고 확장하여이 디렉토리 구조 및 네임 스페이스를 인식해야합니다. 그렇지 않으면 당신은 zend way에 묶여 있습니다. –

+0

오케이, 이것이 유일한 방법 인 것 같습니다. 감사! 귀하의 회신에 감사드립니다. – misterjinx

답변

0

젠드 프레임 워크는 오토로더에서 빌드되어 있습니다. 이 디렉토리 트리에 클래스 이름을 매핑하여 작동하므로 Application_Model_Actors_Actor 불행하게도, 당신이 변경할 수 없습니다

Application\ 
Models\ 
    Actors\ 
    Actor.php 

에 매핑 얻을 것이다. 찾고있는 기능은 namespacing이지만 아직 개발중인 Zend Framework 2에서만 지원됩니다 (사실상 주요 기능 중 하나입니다).

+0

. 그래서 이것을 바꿀 수있는 다른 방법이 정말로 없습니까? 'Application_Model_Actors_Actors'와 같은 모델로 작업하는 것은 매우 어려울 수 있습니다 : - <아마도 다른 누군가가 해결책을 가지고 있습니다. – misterjinx

+0

내가 아는 한, 이름을 더 짧게 만들 수있는 유일한 방법은 디렉토리 구조를 변경하는 것입니다. – mrwooster

+1

또는 zend autoloader를 확장/수정하여 필요한 작업을 수행하십시오. –

0

봅니다 다음) (이

$ 로더 = $ this-> getResourceLoader을 시도 할 수 Zend_Application_Bootstrap_Bootstrap를 확장하는;

$ loader-> addResourceType ('books', 'models/books', 'Model_Book'); $ loader-> addResourceType ('액터', '모델/액터', 'Model_Actor');

저는 또한 이런 종류의 구현을 관찰자 패턴으로 구현하려고합니다.