Как я могу уменьшить свое имя класса в Zend для вызова его из любого места приложения? - PullRequest
1 голос
/ 19 декабря 2010

Я хочу следовать Соглашение об именовании файлов Zend .

У меня есть Object.php файл с классом и функцией в нем.

MyZendProject-> application-> models-> Test-> Object.php

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

Теперь я хочу получить доступ к вышеуказанной функции теста в следующем файле, но этоне найти его.

MyZendProject-> application-> modules-> test-> controllers-> TestController.php

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

Но когда я называю класс Application_Model_Test_Object в Object.php и вызовите его в TestController следующим образом:

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

Проблема в том, что я не хочу использовать Приложение в имени класса, потому что оноэто слишком долго и некрасиво.Есть ли способ, которым я называю класс Model_Test_Object и доступ к нему в любом месте приложения, не включая файл.Я видел где-то в Botstrap.php , чтобы решить эту проблему, но я не запомнил и не смог найти его снова.

Любая помощь будет оценена.

Спасибо

Ответы [ 4 ]

3 голосов
/ 19 декабря 2010

Вы должны написать собственный автозагрузчик в начальной загрузке:

  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_ для ваших собственных библиотек

1 голос
/ 19 мая 2011

Мне также не нравятся очень длинные имена моделей в ZF, т. Е. Класс Application_Model_DbTable_SomeTableName

Сохранение соглашений о наименовании в стиле Pear и автоматическое обнаружение ... вот как я решил это:

1: добавить следующее в ваш index.php include_path: realpath (APPLICATION_PATH. '.. / models') // зависит от того, где находится ваш файл index.php.

2: добавьте эту строку в ваше приложение.ini autoloaderNamespaces [] = "Model _"

3: создайте папку внутри папки ваших моделей и назовите ее Model

4: назовите свой класс модели как этот Model_SomeTableName и сохраните все свои классы моделей впапка new models / Model.

теперь в вашем контроллере вы можете просто вызвать $ m = new Model_SomeTableName ();и он будет автоматически найден и включен.

1 голос
/ 20 декабря 2010

Попробуйте добавить эту строку в свой файл config / application.ini

autoloaderNamespaces [] = "Models"

1 голос
/ 19 декабря 2010

так со мной будет работать

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

тогда, когда вы просто включите файл

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

просто включите "x.php", и он будет работать

...