문제

누군가가 "새로운"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')
        ),
    );
}

그것을 알아내는 데 시간이 걸렸습니다. 누군가의 시간을 절약하기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top