모델에는 zend_autoloader를 사용하십시오
-
12-09-2019 - |
문제
누군가가 "새로운"Zend Autoloader를 사용하여 모델을로드하는 방법을 알고 있습니까? 현재 내 구성이 다음과 같습니다.
application.ini
# Autoloader Namespace
autoloadernamespaces.0 = "Sl_"
bootstrap.php
/**
* Start Autoloader
*
* @access protected
* @return Zend_Application_Module_Autoloader
*/
protected function _initAutoload()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Sl_',
'basePath' => dirname(__FILE__),
));
return $autoloader;
}
따라서 /models/user.php에 모델을 배치하면
class Sl_Model_User{}
새로운 객체를 만들고 모든 것이 설계된 것처럼 작동합니다. 그러나 Autoloader를 사용하여/models/dao/userdb.php에 배치 된 모델을로드하려면 어떻게해야합니까?
class Dao_UserDB{}
해결책
Resource_Autoloader의 설명서를 확인하십시오 (이 목적은 모델 디렉토리 또는 다른 곳, 즉 /라이브러리 폴더 외부에있는 리소스를로드하는 것입니다).
"Resource Autoloader는 Zend Framework 코딩 표준 지침을 따르지만 클래스 이름과 디렉토리 구조 사이에 1 : 1 매핑이없는 네임 스패닝 라이브러리 코드를 관리하기위한 것입니다. 주요 목적은 응용 프로그램 리소스 코드와 같은 자동로드 애플리케이션 리소스 코드를 용이하게하는 것입니다. 응용 프로그램 별 모델, 양식 및 ACL.
Resource Autoloaders는 인스턴스화에 대한 자동 로더에 등록하며 연결된 네임 스페이스와 함께 등록합니다. 이를 통해 특정 디렉토리에서 쉽게 네임 스페이스 코드를 만들 수 있으며 여전히 자동로드의 이점을 얻을 수 있습니다. "
path/to/some/directory/
acls/
Site.php
forms/
Login.php
models/
User.php
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'path/to/some/directory',
'namespace' => 'My',
));
$resourceLoader->addResourceTypes(array(
'acl' => array(
'path' => 'acls/',
'namespace' => 'Acl',
),
'form' => array(
'path' => 'forms/',
'namespace' => 'Form',
),
'model' => array(
'path' => 'models/',
),
));
부스트랩 파일에서 시도해보십시오.
protected function _initLoaderResource()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => 'your_doc_root' . '/application',
'namespace' => 'MyNamespace'
));
$resourceLoader->addResourceTypes(array(
'model' => array(
'namespace' => 'Model',
'path' => 'models'
)
));
}
다른 팁
현재 설정에 따라
classfile :/models/dao/userdb.php
classname : 클래스 dao_userdb {}
해야한다:
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => 'Dao_',
'basePath' => APPLICATION_ROOT.'/Models/Dao/',
));
그러나 당신은 또한 클래스의 이름을 지정할 수 있습니다 : s1_dao_userdb () 이것은 변경하지 않고 작동해야합니다.
사용자 정의 모델 (사용자 정의 라이브러리 DIR)에 대한 자동 로더 규칙을 정의하려면 다음과 같습니다.
|-application
|-library
|-Foo
|-Models
|-Bar.php (holds Foo_Model_Bar class - mind no 's' in class name)
|-Forms
|-Bar.php (holds Foo_Form_Bar class - mind no 's' in class name)
|-Zend
|-public
|-test
이것을 bootstrap.php에 추가해야합니다
/**
* Enable loading custom classes
*/
public function _initAutoloaders()
{
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH . '/../library/Foo',
'namespace' => 'Foo_'
));
$resourceLoader->addResourceTypes(array(
'foomodels' => array(
'namespace' => 'Model_',
'path' => 'Models')
),
'fooforms' => array(
'namespace' => 'Form_',
'path' => 'Forms')
),
);
}
그것을 알아내는 데 시간이 걸렸습니다. 누군가의 시간을 절약하기를 바랍니다.