Modeller için Zend_Autoloader kullanın

3 Cevap php

Birisi Modeller Yük "yeni" Zend Autoloader nasıl kullanacağını bilir ki? Moment benim Yapılandırma bu gibi görünüyor:

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;
    } 

Yani ile / Modeller / User.php bir model yerleştirdiğinizde

class Sl_Model_User{}

tasarlanmış gibi ve yeni bir nesne oluşturmak, her şey çalışıyor. Ama nasıl i / Modeller / Dao / UserDB.php yerleştirilen bir Model yüklemek için Autoloader kullanabilirim?

class Dao_UserDB{}

3 Cevap

(- / Kitaplık klasörü dışında yani onun amacı başka modeller dizin veya ikamet kaynaklarını yüklemek için olan) Resource_Autoloader üzerindeki belgeleri kontrol edin.

"Kaynak autoloaders Zend Framework standart kurallar kodlama, ancak sınıf adı ve dizin yapısı arasındaki 1:1 eşleme yok ki takip alanlı kitaplık kodu yönetmek için tasarlanmıştır. Onların temel amacı autoloading uygulama kaynak kodunu kolaylaştırmak için, gibi Uygulamaya özel modeller, formlar ve ACL.

Kaynak autoloaders ilişkili oldukları için ad ile, örnekleme üzerinde otomatik yükleyici ile kayıt. Bu kolayca özel dizinlere kod ad ve hala autoloading yarar sağlar. "

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/',
),

));

Lütfen boostrap dosyada bu deneyin:

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'
		)
	));
}

Mevcut kurulum bağlı olarak

ClassFile: /Models/Dao/UserDB.php

ClassName: class Dao_UserDB{}

olmalıdır:

$autoloader = new Zend_Application_Module_Autoloader(array(
    'namespace' => 'Dao_',
    'basePath'  => APPLICATION_ROOT.'/Models/Dao/',
));

But you also could name the Class: S1_Dao_UserDB() this should work without changing.

(Özel kütüphane Dir) özel modeller için autoloader kurallar tanımlamak gibi:

|-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

Sen bootstrap.php Bu eklemeniz gerekir

/**
 * 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')
        ),
    );
}

Someones zaman kazandırır umut, onu anlamaya biraz zaman aldı.