2010-08-04 4 views
1

Zend Framework 및 Zend_Translate을 사용하는 프로젝트가 있습니다.Zend Framework에서 수정 된 클래스를 저장하는 방법은 무엇입니까?

표준 CSV 어댑터를 Zend_Translate로 약간 변경해야했습니다. 이제이 변경된 어댑터를 어디에 둘 것인지 궁금합니다. 기본적으로

는 어댑터 나뿐만 아니라 새로운 어댑터를 넣어 한 곳입니다

/Library/Zend/Translate/Adapter/Adaptername.php 

에 저장됩니다.

그러나 Zend 라이브러리를 내 사용자 지정 확장명으로 "오염"시키고 싶지 않습니다. 파일을 잃어 버릴 염려없이 ZF를 업데이트 할 수 있습니다. ZF의 중앙 설치 버전을 계속 사용할 수 있기를 원합니다. 그리고 커스텀 어댑터는 내가 작업하고있는 프로젝트의 일부분이다.

이 문제를 처리하거나 대체로드 위치를 지정하는 Zend Framework 방식이 있습니까?

언어 어댑터는

$this->_adapter = new $adapter($data, $locale, $options); 

(어디 $adapterZend_Translate_Adapter_Adaptername 것)

그래서 표준 자동 로딩 규칙을 적용하여로드됩니다. Zend Autoloader에게 두 번째 위치를 살펴 보도록 지시하는 간단한 방법이 있습니까?

답변

5

당신은 당신이 이렇게 해달라고하면, 당신의 모델 폴더에 넣어, 오토로더가 설정이 얼마나에 따라 lib 폴더

/lib 
/Zend 
    /Translate 
    /Adapter 
    /Csv.php 
/My 
    /Translate 
    /Adapter 
    /Csv.php 

you have to setup the "namespace" with it:

$autoloader->registerNamespace('My_'); 

을 추가 또는 수 있습니다. 기본적으로 오토로더는 어쨌든에 액세스 할 수있는 한 넣지 않아도됩니다. Zend_Autoloader은 임의의 자동 로더 콜백을 등록 할 수 있으므로 실제로 귀하에게 달려 있습니다.

+1

내 대답은 정확히 똑같습니다. 당신의 말은 훨씬 더 잘 표현되었습니다. +1 –

+0

건배 @Gordon,하지만 그것은'Zend_Translate' 자체도 다시 작성해야한다는 뜻입니까? 'Zend_Translate_Adapter'의 클래스 이름을 생성하기 때문에, 그것을 전달하는'$ adapter' 매개 변수에 따라, 대신에'My_Translate_Adapter _... '를 만들 가능성이 없습니다. 내가해야 할 일은 똑같은 * 네임 스페이스를위한 두 개의 디렉토리 구조에서 젠드를 찾는 것입니다. 불가능할 수도 있습니다. Zend_Loader를 살펴보고 내가 찾은 것을 볼 것입니다. –

+0

@Pekka no, 그럴 필요는 없습니다. http://framework.zend.com/manual/en/zend.translate.adapter.html#zend.translate.adapter를 참조하십시오.selfwritten – Gordon

1

나는이 사이트의 규칙 때문에 고든의 대답에 대해 논평 할 수는 없지만 그는 적절하다고 생각합니다. 당신이 경과 한 경우 젠드 네임 스페이스에

$translate = new Zend_Translate('My_Translate_Adapter_Class', ...);

구성 요소를 먼저 확인 : 어댑터를로드하는 방법에 대한 귀하의 질문에 대답하기 위해, 당신은 변환 객체의 생성자에 전체 클래스 이름을 전달해야합니다 짧은 이름 (예 : 'gettext')을 사용하지만 어댑터 이름을 직접 클래스로로드하려고 시도합니다.

적어도이 내용은 1.10에 해당되며, 잠시 생각해 보았습니다.

+0

나는이 사실을 간과했다. 감사! –

관련 문제