Я создал пакет, следующий за инструкциями "Создание пакета" в документации Laravel 4. После создания пакета я создал папку "контроллеры" и файл маршрутов. Новая файловая структура:
/src
/Vendor
/Package
PackageServiceProvider.php
/config
/controllers
/lang
/migrations
/views
routes.php
/tests
/public
Я добавил файл маршрутов в часть загрузки поставщика пакетов:
public function boot()
{
$this->package('vendor/package');
include __DIR__ . '/../../routes.php';
}
Затем добавлен базовый маршрут в файл маршрутов:
Route::get('/package', function() {
return "Package route test";
});
Посещение моего приложения по указанному маршруту (app.dev/package) возвращает ожидаемое:
Package route test
Затем добавление основного вызова контроллера на маршрут (с использованием стандартного контроллера Laravel, "HomeController" ) работает:
Route::get('/package', '[email protected]');
Затем я выполнил этот ответ SO для настройки контроллера для пакета. Я добавил папку src/controllers в карту классов композитора, затем я сбросил автозагрузчик и проверил vendor/composer/autoload_classmap.php и обнаружил, что класс успешно загружен композитором:
<?php
// autoload_classmap.php generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'HomeController' => $baseDir . '/src/controllers/HomeController.php',
);
Теперь я добавил новый контроллер пакета к маршруту с использованием пространства имен:
Route::get('/package', 'Vendor\Package\Controllers\[email protected]');
но это приводит к ошибке об отсутствии класса:
ReflectionException: Class Vendor\Package\Controllers\HomeController does not exist
Я также пробовал называть его с помощью имени пакета:
Route::get('/package', 'Package::[email protected]');
который производит ту же ошибку:
ReflectionException: Class Vendor\Package\Controllers\HomeController does not exist
Независимо от того, что я пытаюсь сделать, пакет не может получить доступ к своему собственному контроллеру, который подтверждает композитор (просмотрев поставщика/пакет/autoload_classmap.php).
Любые идеи? Я не уверен, что проблема заключается в том, что композитор не загружает класс, я не уверен, с чего начать с отладки проблемы. Я создал другой пакет и повторил шаги здесь и получил ту же проблему.
Я могу получить доступ к представлениям пакетов как из пакета, так и из приложения, например:
View::make('package::view');
Проблема заключается в том, что между композитором загружается контроллер и Laravel может получить к нему доступ.