Intereting Posts
Как обновить значение конкретного ключа в ассоциативном массиве в PHP? PHP: Catchable fatal error: Объект класса stdClass не может быть преобразован в строку Передача массива из PHP в Javascript с помощью JQuery & JSON Как настроить заголовок для всех запросов в группе маршрутов PHP передаёт переменную id через href Присоединиться к таблице в Symfony 2 Передача JSON-кодированной переменной из PHP в Javascript через POST Вывод родительской ссылки в html.tpl.php Невозможно использовать file_get_contents (), ничего не возвращает Наследование класса в PHP 5.2: переопределение статической переменной в классе расширения? PHP: пусть файл возвращает свой собственный каталог Если isset $ _POST Stripe: нет такого токена .. аналогичный объект существует в тестовом режиме, но для выполнения этого запроса использовался клавиша режима реального времени Есть ли ограничение по размеру для открытия файлов в PHP? Включить короткие короткие теги PHP через .htaccess

Могу ли я использовать промежуточное программное обеспечение Laravel 5, чтобы позволить пакетам перекрывать маршруты приложений?

Я хотел бы иметь возможность переопределять маршруты, определенные в app / Http / routes.php, с помощью маршрута в пакете.

Например, в app / Http / routes.php у меня может быть следующее:

Route::get('/search/{type?}',['as' => 'search','uses' => 'SearchController@search']); 

Я хочу иметь возможность определить это в файле /vendor/author/package/src/Http/routes.php:

 Route::get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']); 

Сначала загружается файл app / Http / routes.php, поэтому используется маршрут, а не пакет.

В Laravel 4 я сделал бы это, используя App :: before или App :: after, придав им приоритет.

Как и в маршрутах пакетов:

 App::before(function() { Route::get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']); }); 

Я не знаю, как добиться этого в Laravel 5. Я нашел этот https://mattstauffer.co/blog/laravel-5.0-middleware-filter-style , но не знаю, как использовать это, чтобы делать то, что я хочу ,

Изменить: способ Laravel 4 сделать это позволит установить этот приоритет для каждого маршрута, поэтому я не просто загружаю все маршруты пакетов перед приложением.

Вы должны иметь возможность изменить порядок регистрации маршрутов, изменив порядок поставщиков услуг в config/app.php .

В настоящее время это выглядит примерно так:

 'providers' => [ // ... 'App\Providers\RouteServiceProvider', // ... 'Vendor\Package\PackageServiceProvider', ], 

Теперь просто измените порядок, чтобы пакет был загружен первым:

 'providers' => [ // ... 'Vendor\Package\PackageServiceProvider', // register package routes first 'App\Providers\RouteServiceProvider', // ... ], 

Чтобы просто определить приоритеты для определенных маршрутов, вы можете (ab) использовать метод register() поставщика услуг. Мне не нравится метод, но он работает, и я не мог найти ничего лучшего …

Когда поставщики услуг загружаются, вызывается метод register() для каждого провайдера. После этого (и в том же порядке) метод boot() . Это означает, что независимо от порядка ваших поставщиков метод register() в вашем пакете всегда будет вызываться перед методом boot() в RouteServiceProvider . Это может выглядеть примерно так:

 class PackageServiceProvider extends ServiceProvider { public function boot(){ // register the regular package routes } public function register(){ // register route "overrides" // for example like this: (obviously you could also load a file) app('router')->get('/search/properties', ['as' => 'properties','uses' => 'PropertyController@search']); } }