سؤال

هل يعرف شخص ما كيفية استخدام AutoLoader "جديد" ZEND لتحميل النماذج؟ في الوقت الحالي يبدو التكوين الخاص بي مثل هذا:

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 (هدفها هو تحميل الموارد الموجودة في دليل النماذج أو في أي مكان آخر - أي خارج مجلد / المكتبة).

"تهدف Autoloaders من الموارد إلى إدارة رمز مكتبة Namespaced تتبع إرشادات ترميز IzenP Framework الترميز القياسي، ولكن والتي لا تملك تعيين 1: 1 بين اسم الفصل وبنية الدليل. هدفهم الأساسي هو تسهيل رمز مورد تطبيق التلقائي، مثل النماذج، النماذج، النماذج، acls.

سجل Autoloaders Resource AutoLoaders مع AutoLoader عند إنشاء مثيل، مع مساحة الاسم المرتبطة بها. يتيح لك ذلك بسهولة رمز مساحة الاسم في أدلة محددة، ولا يزال يجني فوائد التحميل الذاتي. "

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

));

جرب هذا في ملف Boostrap الخاص بك:

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: Class DAO_USERDB {}

يجب ان يكون:

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

ولكن يمكنك أيضا تسمية الفصل: S1_DAO_USERDB () يجب أن يعمل هذا دون تغيير.

لتحديد قواعد Autoloader للنماذج المخصصة (في مكتبة مخصصة 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