Как включить библиотеку в приложение Zend Framework 2, используя автозагрузку на основе пространства имен?
Я создал подпапку MyNamespace
в /vendor/
(это правильное место для собственных библиотек?) и хотите использовать такие классы, как MyNamespace\Mvc\Router\MyCustomRouter
в моем приложении. Как я могу включить эту библиотеку в автозагрузку на основе моего пространства имен?
3 ответа
Редактировать init_autoloader.php
и изменить if ($zf2Path) {
раздел должен быть:
if ($zf2Path) {
if (isset($loader)) {
$loader->add('Zend', $zf2Path);
} else {
include $zf2Path . '/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'autoregister_zf' => true,
'namespaces' => array(
'MyNamespace' => __DIR__ . '/vendor/MyNamespace',
),
)
));
}
}
Обратите внимание на добавление MyNamespace
ключ в Zend\Loader\StandardAutoloader
раздел.
В дополнение к ответу Роба, некоторые другие способы автозагрузки пользовательской библиотеки
Во-первых, убедитесь, что структура вашей папки соответствует psr0.
Типичная структура для мифической psr0-совместимой библиотеки MyNamespace, используемой в примерах
vendor/
MyNamespace/
lib/
MyNamespace/
FooClass.php
BarClass.php
Включить из файла Module.php, используя getAutoloaderConfig
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/lib/MyNamespace',
),
),
);
}
Прямо в index.php
с использованием AutoloaderFactory
настроить StandardAutoloader
// Setup autoloading
require 'init_autoloader.php';
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
'MyNamespace' => __DIR__ . '/../vendor/MyNamespace/lib/MyNamespace',
),
)
));
Вы можете сделать то же самое в файле./config/autoload/.
<?php
// file ./config/autoload/namespaces.local.php
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
'MyNamespace' => __DIR__ . '/../../vendor/MyNamespace/lib/MyNamespace',
),
)
));
Еще одной альтернативой для включения вашей библиотеки является редактирование vendor/composer/autoload_namespaces.php
<?php
// autoload_namespaces.php generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
'MyNamespace\\' => $vendorDir . '/MyNamespace/lib/',
);
Также вы можете использовать автозагрузку композитора
{
"autoload": {
"psr-0": {"MyNamespace\\": "vendor/MyNamespace/"}
}}