2011-09-30 2 views
1

우리는 서로 다른 상황에 따라 application.ini에서 다르게 구성되는 Zend_Log를 사용했습니다. 우리는 초기화/그것은 부트 스트랩 솜씨로 레지스트리에 저장 :젠드 프레임 워크에서 커스텀 리소스 플러그인 개발/사용

$r = $this->getPluginResource('log'); 
$logger = $r->getLog(); 

그러나 우리는 사용자 정의 기능을 추가하고, 같은 방법으로 싶어하는 Zend_Log (예를 들어, Our_Log)를 서브 클래 싱했습니다. 그렇다면 새로운 Resource Plugin을 만들어야합니다. 간단하게 Application/Resource/Log.php를 복사하고, 파일 이름을 Ourlog.php로 변경하고, 클래스 이름을 Zend_Application_Resource_Ourlog로 바꿉니다. 지금은 클래스 "Our_Log"에 대해 걱정하지 마십시오. 새로운 리소스 플러그인을 사용하여 Zend_Log를 가져와 변수를 줄입니다.

그래서 다음, 부트 스트랩에서 우리의 새로운 코드는 다음과 같습니다

$r = $this->getPluginResource('ourlog'); 
$logger = $r->getLog(); 

그러나 물론이 작동하지 않습니다, "R"이 아닌 객체에 방법을 적용 오류입니다. 설명서에 따르면

"이 리소스 플러그인의 접두사 경로를 등록하면 응용 프로그램에서 을 사용할 수 있습니다."

어떻게 접두어 경로를 등록 하시겠습니까? 그것은 도움이되었을 것입니다. 하지만 그건 중요하지 않아야합니다. 기본값과 동일한 접두사 경로를 사용했고, 필자가 "요구"하기 때문에 파일을 읽는 것입니다.

어쨌든, 내가 누락 된 간단한 단계에 대한 안내는 크게 감사하겠습니다.


포인터를 주셔서 감사합니다 .- 너무 가깝고 너무 가깝습니다. 내가 INI 파일을 사랑하지 않기 때문에 내가 넣어 부트 스트랩에, 그리고

library/Xyz/Resource/Xyzlog.php에 넣어, 나는

좋아 ...을지고 있다고 생각, 그래서 클래스 Xyz_Resource_Xyzlog을 이름 :

$loader=$this->getPluginLoader(); 
$loader->addPrefixPath('Xyz_Resource','Xyz/Resource/'); 
$r = $this->getPluginResource('xyzlog'); 
if (!is_object($r)) die ('Not an object!!'); 

갑작스런 죽음. 그럼, 알았어, ini :

pluginPaths.Xyz_Resource='Xyz/Resource/' 

같은. 도움이 안돼. 필자는 플러그인 경로의 기본 경로에 PHP "include"경로가 포함되어 있다고 믿었습니다. 내가 그걸 착각 한거야? 다른 아이디어? 나는이 상황에서 다른 가난한 영혼을 돕기 위해 나에게 마침내 효과가있는 것을 기쁜 마음으로 써 줄 것이다. 이름 공간과 관련이 있을지도 모릅니다. 아마도?

답변

4

플러그인 클래스는 자동 로더와 약간 다르게 작동하는 플러그인 로더를 사용하여 해결됩니다. 그래서 클래스를 요구하는 것은 당신을 여기에서 도와주지 않는다. 대신 application.ini에 다음을 추가하십시오.

pluginPaths.Application_Resource = "Application/Resource" 

그러면 정상적으로 클래스를 사용할 수있게됩니다. 위의 경로가 기본 Zend 경로보다 먼저 검사되기 때문에 클래스 이름을 'Log'로 지정하고 Logger 리소스를 확장하여 표준 기능을 무시할 수도 있습니다.

+1

+1. 또한 질문 작성자에게 보내는 쪽지 인 Zend_ *는 실제로 프레임 워크의 일부인 클래스 용으로 예약되어 있으므로 리소스 이름을 Zend_ *로 지정하면 안됩니다. [명명 규칙 (naming conventions)] (http://framework.zend.com/manual/en/coding-standard.naming-conventions.참고 : * 중요 * : Zend Framework 라이브러리와 함께 배포해야하지만 표준 또는 추가 라이브러리 (예 : Zend가 배포하지 않는 응용 프로그램 코드 또는 라이브러리)의 일부가 아닌 코드는 "Zend_"또는 "ZendX_". – drew010

관련 문제