ZF2 автозагрузка пользовательских модулей с помощью композитора
Я пытаюсь настроить проект ZF2 (немного отличающийся от zf2skeleton), и я хочу использовать composer для обработки всех автозагрузок, не только от вендоров (установленных через composer), но и от тех модулей, которые я создаю.
По какой-то причине я не могу получить доступ к своему контроллеру индекса модуля приложения. Я думаю, что автозагрузка не работает... Я просто не знаю, что я могу делать неправильно...
Спасибо!
Файлы и данные ниже:
Это моя структура папок:
index.php
private
- modules
-- Aplication
--- src
----- Aplication
------- Controller
---------- IndexController.php
- vendor
-- zendframework
-- composer
-- autoload.php
- composer.json
- composer.phar
main.config.php
return array(
'modules' => array(
'Application',
),
'module_listener_options' => array(
'config_glob_paths' => array(
'private/config/autoload/{,*.}{global,local}.php',
),
'cache_dir' => realpath(dirname(__DIR__) . '/../../data/cache'),
'module_paths' => array(
realpath(__DIR__ . '/../module'),
realpath(__DIR__ . '/../vendor'),
),
),
);
index.php
include_once 'private/vendor/autoload.php';
$application = Zend\Mvc\Application::init(include 'private/config/main.config.php');
return $application;
composer.json
{
"repositories": [
{
"type": "composer",
"url": "http://packages.zendframework.com/"
}
],
"require": {
"php": ">=5.3.3",
"zendframework/zendframework": "2.*"
},
"autoload": {
"psr-0": {
"Application\\": "module/Application/src"
}
}
}
Конфигурация приложения
return array(
'router' => array(
'routes' => array(
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'index',
),
),
),
),
),
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController'
),
),
);
IndexController
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
class IndexController extends AbstractActionController {
public function indexAction() {
die("app ok");
}
}
1 ответ
Во-первых, из того, что я вижу, вы не запускаете свое приложение:
$application = Zend\Mvc\Application::init(include 'private/config/main.config.php');
$application->run();
Другое дело, что вам не нужно использовать composer для загрузки ваших модулей. Поскольку в конфигурацию вашего приложения уже включены module
каталог, процесс загрузки модуля будет автоматически сканировать каталог и использовать стратегию загрузки, определенную на уровне классов вашего модуля.