2010-03-22 2 views
6

ZF 1.10 응용 프로그램에서 사용자 정의 클래스가있는 폴더가 있습니다. 폴더는/library에 있습니다. 그들이 어디 있는지 ZF에게 어떻게 알릴 수 있습니까? application.ini와 index.php는 모두 라이브러리의 경로를 설정하지만 ZF는 파일을 찾을 수 없습니다. 그는 부트 스트 래퍼에 대해 이야기 곳 내 사용자 정의 클래스가있는 zend 프레임 워크를 나타내는 방법

는, 특히 4 페이지, 당신은

답변

8

가능한 많은 솔루션이 있습니다.

autoloaderNamespaces[] = "Example_" 

다른 솔루션 :

  • 이 디렉토리 추가를 include_pathset_include_path()를 사용하여 (임시 해결책)
  • 를 젠드 응용 프로그램을 사용할 때 가장 일반적인, 추가 application.ini에서 네임 스페이스를 등록하는 것입니다 PEAR 명명 규칙을 따르십시오 (따라서 경로 해석이 가능합니다)

에 오토로더 설정 0 :

protected function _initAutoloader() 
{ 
    $autoloader = Zend_Loader_Autoloader::getInstance(); 
    $autoloader->registerNamespace("Example"); // or Example_ 
} 

결국, 예를 들어, 모듈 또는 resource autoloader을 설정.

$resourceLoader->addResourceTypes(array(
    'acl' => array(
     'path'  => 'acls/', 
     'namespace' => 'Acl', 
    ), 
    'example' => array(
     'path'  => 'examples/', 
     'namespace' => 'Example', 
    ),   
)); 
+0

takehin 고맙습니다. "$ autoloader-> registerNamespace (.."dit it! – curro

+0

안녕하세요, 꽤 오래된 게시물이지만 이것에 대해서 도움을 줄 수 있습니까?'Zend (1.12)'나는 디렉토리'Example'과 클래스'Example_Test 'Example' 바로 아래에 있습니다. 네임 스페이스'Example'을 등록했는데,'php' 코드에서'Example_Test' 클래스에 액세스하면 아무 문제없이 할 수 있습니다. 그러나'getClassPath()'메소드를 보면 'Zend_Loader_Autoloader_Resource' 내부에서 유효한 경로 (어떤 조건들)를 반환하지 않기 때문에'autoload()'메소드에 의해 파일이로드되지 않았다는 것을 의미합니다. 그러면 실제로로드되는 방법은 무엇입니까? –

1

체크 아웃 this older Zend Framework tutorial from Rob Allen 감사드립니다. 그의 최신 튜토리얼은 뛰어난 성능을 발휘하여 Zend Tool을 사용하여 응용 프로그램을 작성하고 이에 대해 광택을 보입니다.

나를 놀라게 한 한가지는 포함하려는 폴더가 공개/라이브러리라고 언급했기 때문입니다. 의도적으로 코드를 전세계 사람들과 공유하고 싶지 않다면 다른 위치에 두는 것이 좋습니다 ... 이 아닌 다른 "공개"폴더가없는 경우 (이 경우에는 미래의 혼란을 피하기 위해 그것을 이름을 바꾼다.

+0

는 칼을 주셔서 감사합니다. 죄송합니다. 공용 디렉토리에 라이브러리가 없습니다. 그것은 단지 실수입니다. 그것은 "루트"디렉토리에 있습니다. – curro

+0

Rob Allen 튜토리얼은 ZF 1.5를 사용합니다. 내가 사용하는 버전은 1.10입니다. 부트 스트랩 파일을 만들지 만 Bootstrap 클래스는 비어 있습니다. 모든 것은 사용자 정의 클래스를 제외하고는 정상적으로 작동합니다. 나는 다른 곳에서 ZF 라이브러리를 가지고 있고 PHP에 경로 포인트가 포함되어있다. – curro

+0

고기와 감자는 set_include_path 여야합니다. 적어도 빈 부트 스트랩 클래스에 넣을 수 있다고 생각합니다. 또한 Rob은 자신의 사이트에서 1.10까지 자습서를 업데이트했습니다. –

24

우리는 종종 우리 자신의 사용자 지정 함수 나 클래스를 작성하는 문제와 그 위치를 알기 쉽게 설명합니다.

그래서 사용자 정의 클래스 (또는 사용자 정의 라이브러리)를 추가하기 위해 zend 프레임 워크의 자동 로더 이름 공간을 사용할 수 있습니다.

autoloaderNamespaces.custom = "Custom_" 

또는

autoloaderNamespaces[] = "Custom_" 

모든 사용자 정의 클래스

이 라이브러리 디렉토리에 보관됩니다 application.ini 파일에 아래 라인을 추가합니다. 라이브러리 디렉토리에서 application.ini에 정의 된 폴더 이름 'Custom'을 만듭니다.

클래스가 파일 (예를 들어, Custom_Test)의 선언에서 'Custom_'로 시작됩니다

이제 우리는 우리의 응용 프로그램에, $test = new Custom_Test()로이 클래스를 사용할 수 있습니다.

+0

보고있는 사람들을 위해 이 방법은 받아 들인 대답보다이 방법이 조금 더 선호된다고 생각합니다. –

+0

Angl.King.47 및 Muhammad Yaseen에 동의합니다. 내 경험에 따르면, 이것은 자신의 클래스 라이브러리를 포함하는 훨씬 간단하고 효율적인 방법입니다 또한 zend의 표준 index.php에는 li PHP의 brary 디렉토리는 경로를 포함합니다. –

0

사용자 정의 라이브러리를 작성자에게 추가하십시오.JSON :

"autoload": { 
"psr-0": {"Your": "vendor/My/library"} 
}, 

및 실행 작곡가 갱신

관련 문제