Использование пространств имен PHP в приложении Zend Framework (v1)

Возможно ли в текущей стабильной версии Zend Framework (1.11) работать с классами приложений с использованием пространств имен PHP?

Application\Form\Abc instead of Application_Form_Abc Application\Model\Xyz instead of Application_Model_Xyz etc. 

Начиная с версии 1.1, ZF поддерживает автозагрузку пространств имен , и он отлично работает при включении библиотек с расширением имен, но я был неудачен при попытке выполнить ту же работу с классами приложений.

Related of "Использование пространств имен PHP в приложении Zend Framework (v1)"

На самом деле существует простое обходное решение, предложенное Дмитрием на трекере ZF :

 class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoloader() { $loader = function($className) { $className = str_replace('\\', '_', $className); Zend_Loader_Autoloader::autoload($className); }; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader($loader, 'Application\\'); } } 

Работает как прелесть для меня!

Стандартный автозагрузчик, введенный в 1.12, позволяет использовать пространства имен с минимальными усилиями:

 require 'Zend/Loader/AutoloaderFactory.php'; Zend_Loader_AutoloaderFactory::factory([ 'Zend_Loader_StandardAutoloader' => [ 'autoregister_zf' => true, 'namespaces' => [ 'Application' => '/path/to/Application/src', ] ] ]); 

Теперь вы можете использовать Application\Form\Abc вместо Application_Form_Abc & Application\Model\Xyz вместо Application_Model_Xyz и т. Д.

Примеры каталогов / файловой структуры:

путь / к / Application / SRC / Форма / Abc.php

 <?php namespace Application/Form; class Abc {} 

путь / к / Application / SRC / Модель / Xyz.php

 <?php namespace Application/Model; class Xyz {}