2011-03-19 4 views
0

디렉터리 구조는 다음과 같습니다는 매핑되지 않은 자원을 설정하는 방법

application 
    models 
     Milestones 
      ObserverBroker.php => Application_Model_Milestone_ObserverBroker 
     Observers 
      Milestone.php   => Application_Model_Observer_Milestone 

I 발생한 문제였다 Bootstrap.php

$loader->addResourceType('observer','models/observers','Model_Observer'); 
$loader->addResourceType('observerbroker','models/milestones','Model_Milestone'); 

에서 :

[[email protected]]$ php zfrun.php \ 
>   --environment development -a task.create-milestone -m '%s' \ 
>   -p '%s' 
PHP Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55 

Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 55 


[[email protected]]$ php zfrun.php \ 
>   --environment development -a task.update-milestone -m '%s' -o '%s' \ 
>   -p '%s' 
PHP Fatal error: Class 'Application_Model_Milestone_ObserverBroker' not found in /var/www/html/sites/plugin_handler/application/controllers/TaskController.php on line 81 

답변

0

당신은 shouldn ' Application_Model_ 네임 스페이스에 클래스에 대한 리소스 유형을 추가해야합니다.

기본 모듈 자동 로더가 이미이 규칙을 포함

이 테스트로 appnamespace되는 구성 "응용 프로그램"

를 제공, 난 그냥 두 가지 모델, Application_Model_Test (응용 프로그램/모델/Test.php) 및 Application_Model_Test_Test을 생성 (응용 프로그램 /models/Test/Test.php) 추가하고 아무것도 추가하지 않고, 내 컨트롤러에서 각각의 인스턴스를 만들 수있었습니다. 당신이 "* 연혁 * S"의 Application_Model_Milestone_ 클래스를 저장할 같은

편집 질문을 다시 읽기에

, 그것은 본다 (복수)과 마찬가지로 옵저버 클래스. application/models/Milestoneapplication/models/Observer 아래에 이러한 내용을 저장하는 것이 더 나을 것이고 기본 자동 로더가 그 일을하게하는 것이 더 좋을 것이라고 생각하지만 문제는 대소 문자가 구별되는 것 같습니다.

$loader->addResourceType() 호출은 소문자 폴더 이름을 사용하는 반면 디렉토리 구조 예제는 MilestonesObservers (대문자 시작 문자)을 사용합니다.

대소 문자를 구별하는 파일 시스템에서는 실패합니다.

+0

Milestone을 Milestone으로 변경하고 Observers to Observer를 변경했습니다. 답변 해 주셔서 감사합니다. trac plugin에 옵저버 패턴을 구현하기 위해 이것을 사용합니다. – Efox

관련 문제