2010-12-19 1 views
1

나는 Zend file naming convention을 따르고 싶다.Zend에서 클래스 이름을 줄여 응용 프로그램의 어느 위치에서 호출 할 수 있습니까?

나는 클래스와 기능이있는 Object.php 파일을 가지고 있습니다.

MyZendProject-> 애플리케이션 -> 모델 -> 테스트 -> Object.php는

class Model_Test_Object {  
    public function test() { 
    echo "Test"; 
    } 
} 

지금은 파일을 다음 테스트 기능 이상에 액세스하려면하지만 그것을 발견하지 않습니다.

MyZendProject-> 애플리케이션 -> 모듈 -> 테스트 -> controllers-> TestController.php

$testModel = new Model_Test_Object(); 
$testModel->test(); 

하지만 Object.php의 클래스 Application_Model_Test_Object의 이름을 지정하고 같은 TestController에서 그것을 호출 할 때 이 다음 작동합니다.

$testModel = new Application_Model_Test_Object(); 
$testModel->test(); 

문제는 너무 오래 추한이기 때문에 클래스 이름에 응용 프로그램를 사용하지 않는다는 것입니다. 어떤 방법으로도 클래스 Model_Test_Object의 이름을 지정하고 파일을 포함하지 않고 응용 프로그램 내 어디에서나 액세스 할 수 있습니다. 나는 어딘가에 Botstrap.php이 문제를 해결하기 위해 보았지만 그것을 기억하지 못했고 그것을 다시 찾을 수 없었다.

도움이 될 것입니다.

감사합니다 u는 단지

./ 
/application 
/models 
    /x.php 
... 

그냥 "x.php"를 포함하고 작업 할 파일을 포함 할 때

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/models'), 
    get_include_path(), 
))); 

후 저와 함께 작동하는 방식이다

+0

오토로더를 사용 중이십니까? 어느? 구성 방법을 보여주십시오. – rik

+0

@rik : 처음 구성하는 중입니다. 어디서 오토로드 구성을 찾을 수 있는지 알려주실 수 있습니까? – Awan

답변

3

부트 스트랩에 자신의 오토로더 을 써야합니다.

protected function _initAutoload() 
    { 
    $autoLoader = Zend_Loader_Autoloader::getInstance(); 
    $autoLoader->registerNamespace('My_'); 
    $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
     'basePath' => APPLICATION_PATH, 
     'namespace' => '', 
     'resourceTypes' => array(
      'form' => array(
       'path' => 'forms/', 
       'namespace' => 'Form_' 
      ), 
      'model' => array(
       'path' => 'models/', 
       'namespace' => 'Model_' 
      ) 
     ) 
    )); 
    return $autoLoader; 
    } 

이것은 또한 자신의 라이브러리에 대한 네임 스페이스 My_을 등록합니다

+0

감사합니다. Adam. 이제'Model_Test_Object' 이름으로 작업 중입니다. 하지만 ** My _ **의 목적을 이해하지 못했습니다. 이것을 어디서 사용할 수 있습니까? – Awan

+0

라이브러리 디렉토리에 Zend subdir과 Zend_CLASS-NAME 디렉토리가 있습니다. 모든 Zend 클래스가 있습니다. 자신의 디렉토리에 자신의 플러그인, 구성 요소 등을 만들 수 있습니다. 이 스크립트는 My_ 네임 스페이스를 생성하므로 library/My/Plugin/Plugin.php를 만들고 $ foo = new My_Plugin_Plugin()을 사용하여 라이브러리에 액세스 할 수 있습니다. 예를 들어 Acl 플러그인 또는 모든 ZF 프로젝트에 포함하려는 다른 사용자 지정 기능에 유용합니다. – Adam

+0

이 유용한 정보를 제공해 주셔서 감사합니다. – Awan

1

+0

위의 코드는 어디에 배치합니까? 그리고 내 ** Object.php ** 파일을'zendproject/application/models/Test /'에 넣고 싶습니다. – Awan

+0

당신의 솔루션은 약간 융통성이 없으며 제 생각에는 ZF 코딩 표준을 따르지 않습니다 – Adam

+0

@Awan public/index.php @Adam이 방법은 ZF 사용자가 클래스 lib에 파일을 포함시키는 방법입니다 !! – shereifhawary

1

application.ini 당신의 CONFIGS에이 라인을 추가/시도

autoloaderNamespaces [] = "모델"

1

나는 또한 돈 ZF 클래스의 매우 긴 모델 이름을 좋아하지 마라. Application_Model_DbTable_SomeTableName

배 모양의 명명 규칙 및 자동 디스코텍 매우 ... 이것은 어떻게 해결 했는가?

1 : index.php에 다음을 추가하십시오. include_path : realpath (APPLICATION_PATH. '../models') // index.php 파일의 위치에 따라 다릅니다. 있습니다.

2 :이 줄을 응용 프로그램에 추가하십시오.INI autoloaderNamespaces는 [] = "Model_"

3 : 당신의 모델 폴더 안에 폴더를 만들고 이름을

4 모델

입니다 :이 Model_SomeTableName 같은 모델 클래스의 이름을 지정하고 새로운 모델의 모든 모델 클래스를 저장/모델 폴더.

이제 컨트롤러에서 $ m = new Model_SomeTableName();을 간단하게 호출 할 수 있습니다. 자동으로 발견되어 포함됩니다.

관련 문제