Моя структура каталогов выглядит так:
Пользовательская библиотека – это общая библиотека, которая используется в других приложениях. Он не использует пространства имен, а только подчеркивает стиль.
Я загрузил ZF2-Restful-Module-Skeleton, который я намерен использовать в качестве успокоительного сервера. В InfoController у меня есть этот код:
namespace Main\Controller; use Zend\Mvc\Controller\AbstractRestfulController; class InfoController extends AbstractRestfulController { public function getList() { $data = array( 'phone' => '+30123456789', 'email' => 'email@domain', ); $Res = new CL_Res_Chain_Mutable(); return $data; } }
Сообщение об ошибке:
Неустранимая ошибка: Class 'Main \ Controller \ CL_Res_Chain_Mutable' не найден в C: \ Workspaces \ Zend \ module \ Main \ src \ Main \ Controller \ InfoController.php
Очевидно, мне нужно добавить эту настраиваемую библиотеку в мое приложение Zend, но Im «little» потерял здесь, я действительно не знаю, как это сделать. У меня есть решения для пары, но ни один из них не выглядит таким.
Кроме того, у меня есть другая библиотека в папке c:\Workspaces\Custom library 2
, которая имеет (среди других файлов) файл (класс) D.php, который я использовал как D :: dump ($ data);
Как я могу заставить его работать в моем приложении Zend?
Для загрузки классов библиотеки необходимо настроить StandardAutoloader
. Самый простой способ – модифицировать метод Module::getAutoloaderConfig()
модуля приложения, чтобы он выглядел примерно так:
public function getAutoloaderConfig() { return array( 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), 'prefixes' => array( 'CL' => 'c:\\Workspaces\\Custom library/CL', 'D' => 'c:\\Workspaces\\Custom library 2/D', ), ), ); }
Я добавил ключ prefixes
а затем перечислил имя префикса и где его найти на диске. В документации на стандартный автозагрузчик содержится более подробная информация.
Если вы работаете с Zend Skeleton Application, вы также можете просто добавить эти пространства имен в файл init_autoloader.php .
Пространство имен вашего класса – Main\Controller
. Если вы создадите новый класс здесь, new CL_Res_Chain_Mutable()
php будет загружать его относительно текущего пространства имен Main\Controller\CL_Res_Chain_Mutable
. Ваш класс не является классом с именами, поэтому вам нужно загрузить его из корня. Просто положите \ перед new \CL_Res_Chain_Mutable()
.
По умолчанию ваше приложение будет использовать стандартный Autloader (PSR-0). Это найдет ваши файлы на основе пространств имен и именования, которые используются ZF2. ZF2 позволит вам регистрировать несколько автозагрузчиков, поэтому вы можете использовать разные стратегии, что вам нужно будет сделать, вот пример:
module.php
/** * Get autoloader config * * @return array */ public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( // File containing class map key/value pairs __DIR__ . '/library/autoloader_classmap.php', // Or provide an array with the class map instead... array( 'Application\Bootstrap' => __DIR__ . '/application/Bootstrap.php', 'CL_Res_Chain_Mutable' => __DIR__ . '/library/pathhere/Mutable.php', ), ), 'Zend\Loader\StandardAutoloader' => array( 'namespaces' => array( __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, ), ), ); }
Эта настройка будет использовать команду ZF2, чтобы сначала проверить карту класса, если она не может найти то, что она ищет, она вернется к стандартному автозагрузчику.
http://framework.zend.com/manual/2.0/en/modules/zend.loader.class-map-autoloader.html