Пути библиотеки Zend Framework 2

Пытаясь намочить ноги на ZF2, и я наткнулся на свою первую проблему. Скажем, в модуле я хочу использовать Shanty_Mongo (внешнюю библиотеку для подключения к MongoDb)

Поэтому я скопировал весь каталог Shanty в библиотеке и создал новый класс Model:

namespace Dummy\Model; use Shanty\Mongo\Document; class Dummy extends Shanty_Mongo_Document { public function setConnections( $connections ) { Shanty_Mongo::addConnections($connections); } } 

(SetConnections () должен использоваться DI, если я это хорошо понял)

Кажется, что он не нашел Shanty_Mongo_Document. Должен ли я добавить что-то в application.config.php, чтобы указать на дополнительную библиотеку?

Библиотека Shanty_Mongo является «старой» разделительной библиотекой без использования пространств имен. В ZF2 стиль является тем же самым стандартом PSR-0, но с пространствами имен (так что Shanty_Mongo будет Shanty\Mongo ). Тем не менее, вы можете загрузить этот старый стиль с помощью classmap, например. Затем вы можете использовать выделенные классы подчеркивания внутри вашего проекта ZF2.

Я предлагаю вам создать модуль для этой библиотеки и поместить этот модуль под ./vendor (для «модулей, предоставляющих сторонние функции»). В этом модуле вы можете создать следующую структуру каталогов (я предполагаю, что имя модуля ShantyMongo):

 ./vendor/ShantyMongo/ library/ Module.php autoload_classmap.php autoload_function.php autoload_register.php 

Библиотека является подмодулем в хранилище git Shanty-Mongo. Файл autoload_classmap.php – это карта классов, созданная скриптом php classmap_generator.php внутри каталога bin в хранилище ZF2. Тогда autoload_function.php может быть чем-то простым:

 <?php return function ($class) { static $map; if (!$map) { $map = include __DIR__ . '/autoload_classmap.php'; } if (!isset($map[$class])) { return false; } return include $map[$class]; }; 

И autoload_register.php что-то вроде этого:

 <?php spl_autoload_register(include __DIR__ . '/autoload_function.php'); 

Чтобы приложение ZF2 знало, что у вас есть этот модуль, вам нужно заполнить module.php ShantyMongo\Module . Что-то вроде этого должно быть достаточно:

 <?php namespace ShantyMongo; use Zend\Module\Consumer\AutoloaderProvider; class Module implements AutoloaderProvider { public function getAutoloaderConfig() { return array( 'Zend\Loader\ClassMapAutoloader' => array( __DIR__ . '/autoload_classmap.php', ) ); } } 

Если вы добавите «ShantyMongo» в ваш массив модулей в application.config.php , теперь вы установили автозагрузчик для этой сторонней библиотеки внутри ZF2. Затем вы можете использовать свою модель следующим образом:

 <?php namespace Dummy\Model; class Dummy extends Shanty_Mongo_Document { public function setConnections ($connections) { Shanty_Mongo::addConnections($connections); } } 

Поскольку ShantyMongo не использует пространства имен, у вас больше нет этого оператора использования.