Я создал пакет, следующий за "Creating a Package" instructions in the Laravel 4 documentation. После создания пакета я создал папку «контроллеры» и файл маршрутов. Новая структура файла:Доступ к контроллерам пакетов в 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]');
Я последовал this SO answer для настройки контроллера для пакета. Я добавил папку SRC/контроллеры композитору classmap, то я бросил автозагрузчик и проверил поставщик/композитор/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
Я также попытался назвать его U петь имя пакета:
Route::get('/package', 'Package::[email protected]');
, который производит ту же ошибку:
ReflectionException: Class Vendor\Package\Controllers\HomeController does not exist
Независимо от того, что я пытаюсь пакет не могу получить доступ к его собственному контроллеру, который композитором подтверждающий загружается (при просмотре поставщика/пакета/autoload_classmap.php).
Любые идеи? Я не уверен, что проблема заключается в том, что композитор не загружает класс, я не уверен, с чего начать с отладки проблемы. Я создал другой пакет и повторил шаги здесь и получил ту же проблему.
я могу получить доступ мнения пакет как из пакета и приложения, например:
View::make('package::view');
Проблема, кажется, между композитором загрузки контроллера и Laravel возможность получить к нему доступ.
Я просто играю с Laravel 4 и столкнулся с этой проблемой. Вам действительно нужно добавить каждый класс в файл vendor/composer/autoload_classmap.php? Вы могли бы подумать, что он сможет найти эти классы без этого, не так ли? – neilcrookes
@neilcrookes По соображениям производительности композитор генерирует плоскую карту классов всех классов, этот файл генерируется автоматически, и очень плохая идея отредактировать его вручную для чего угодно, кроме быстрого теста. Он генерируется с использованием информации в вашем файле composer.json. См. Http://getcomposer.org/doc/04-schema.md#autoload – rich97
+1 Спасибо, что вернулись и ответили на ваш собственный вопрос. – rich97