Я хочу иметь контроллеры в своем пакете Laravel 4, но я не могу заставить маршрутизацию работать.
Я следил за инструкциями пакета в документации Laravel 4 и получил файл route.php, работающий с маршрутами без контроллера.
Может кто-нибудь, пожалуйста, дайте мне несколько инструкций о том, как заставить контроллеры пакетов работать в Laravel 4, это было бы очень оценено.
Заранее спасибо.
Lars
// EDIT: // routes.php Route::get('admin', 'Package::AdminController@index'); // Does not work Route::get('admin', function(){ // Works fine return 'Dashboard'; })
Вам нужно будет ссылаться на контроллер с его пространством имен
Route::get('/admin', 'PackageNS\Package\Controllers\AdminController@getIndex');
или даже
Route::controller('PackageNS\Package\Controllers\AdminController', 'admin');
Я не знаю специфики вашей ситуации и не знаю, является ли это «правильным» способом устранения этой проблемы, но поскольку я столкнулся с одной и той же проблемой, я решил поделиться с ней тем, как я ее решил.
Я поставил контроллеры пакетов в подкаталог контроллеров, так что моя структура каталогов выглядит так:
/src /Vendor /Package PackageServiceProvider.php /config /controllers /lang /migrations /views /tests /public
Затем я добавил папку контроллеров в карту классов компоновщика компоновщика моего пакета.
{ "name": "kevin-s-perrine/my-first-packge", "description": "", "authors": [ { "name": "Kevin S. Perrine", "email": "removed@somewhere.com" } ], "require": { "php": ">=5.3.0", "illuminate/support": "4.0.x" }, "autoload": { "classmap": [ "src/migrations", "src/controllers" ], "psr-0": { "KevinSPerrine\\MyFirstPackage": "src/" } }, "minimum-stability": "dev" }
Наконец, я запустил composer dump-autoload
в корневом каталоге пакета, а затем связал контроллер по имени в файле маршрутов.
Route::get('myfirstpackage', 'MyFirstPackageHomeController@getIndex');
В поставщике услуг вашего пакета вы включили файл маршрутов? Я не считаю, что L4 загружает файл маршрута автоматически. Вы можете сделать это в любом месте, но я подозреваю, что это будет наиболее подходящее место для этого.
public function register() { $this->package('vendor/pkgname'); require __DIR__.'/../routes.php'; }
-public function register() { $this->package('vendor/pkgname'); require __DIR__.'/../routes.php'; }
Ты сделал это:
composer dump-autoload
Автозагрузчик должен быть проинформирован о тех блестящих новых классах. Я также предлагаю вам проверить журналы веб-сервера на наличие ошибок.