Статья была отправлена профессиональному сообществу разработчиков Laravel с оригинальной ссылкой: https://learnku.com/ларавель/т…
Если вы новичок в Laravel, маршрутизатор Laravel предоставляет вам отличный, элегантный API. Далее, я не собираюсь вводить какие-либо скрытые или новые знания. Это всего лишь несколько советов, которые могут помочь вам освоить Laravel.
Документация по маршрутизации очень хорошая, и следующие советы дополнят и исправят части, которые помогут вам быстро научиться использовать маршрутизацию в проектах Laravel.
Пользовательские пространства имен
Как говорится в документе, если вы хотите использовать что-то подобное в группе маршрутизации App\Http\Контроллеры\Администратор , вы можете использовать API маршрутизации потоков, описанный в Laravel 5.4:
Route::namespace('Admin')->group(function () {
// Controllers in the App Http Controllers Admin namespace
});Это то, что использует каждый проект Laravel. RouteServiceProvider Технология:
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
Из-за routes/web.php Файл имеет пространство имен, поэтому Admin Пространства имен используют относительные пути.
Должно быть в App\Http\Контроллеры\Администратор Создайте контроллер в пространстве имен, и вы можете выполнить следующую команду в консоли:
php artisan make:controller -r Admin/UsersController
Как и в предыдущем примере, эта команда routes/web.php Маршрутизация, определенная в файле, аналогична этой:
Route::namespace('Admin')
->prefix('admin')
->group(function () {
Route::resource('users', 'UsersController');
});
Макрос маршрутизации
Маршрутизаторы могут быть определены макросом, что означает, что если вы хотите предоставить набор маршрутов через пакет или повторно использовать набор определений маршрутизации, вы можете определить макрос в поставщике услуг.
Например, если у вас есть небольшой пакет, содержащий множество торговых маршрутов, и вы хотите разрешить пользователям переписывать или настраивать некоторые маршруты, вы можете сделать это:
// Within the boot () method of the service provider
public function boot()
{
Route::macro('shopRoutes', function ($prefix) {
Route::group([
'prefix' => $prefix,
'middleware' => ['shopping'],
], function () {
Route::get('products/{product}', '[email protected]');
// ...
});
});
}Затем пользователь может работать над новым проектом Laravel. routes/web.php Макрос был вызван в файле:
collect(config('languages'))->each(function ($language) {
Route::shopRoutes($language);
});
Или выберите следующую реализацию:
Route::macro('shopRoutes', function ($languages) {
Route::group([
'prefix' => '/{language}',
'middleware' => ['shopping'],
'where' => ['language' => implode('|', $languages)],
], function () {
Route::get('products/{product}', '[email protected]');
// ...
});
});
Пример макроса абстрактен, но вы можете видеть, что он означает. Я рекомендую использовать макросы маршрутизации только тогда, когда они могут помочь вашему проекту. Ты будешь знать, когда это сделать!
Отладка маршрутизации
В приложении Laravel, web.php Документы (и api.php Документация)-это самодокументированный документ о маршрутизации, на который программа может реагировать, и я ценю это. Поскольку я больше ценю аспект документа этого файла, я предпочитаю определять маршрутизацию по одному, а не использовать маршрутизацию ресурсов.
Если вы обнаружите, что хотите найти маршрут или отладить все возможные определенные маршруты, маршрут ремесленника:список Эта команда будет очень полезна:
artisan route:list +--------+----------+----------+------+---------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+----------+------+---------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | +--------+----------+----------+------+---------+--------------+
маршрут:список Эта команда очень полезна для просмотра имени маршрута и подключенного к нему промежуточного программного обеспечения. Это также приводит к методу, который я собираюсь представить ниже: именованная маршрутизация.
Именованные Групповые маршруты
Общим соглашением в Laravel является присвоение имен маршрутам, что позволяет легко ссылаться на имя маршрута и избегать жесткого кодирования корневого URI в ваших шаблонах. В некоторых приложениях жесткое кодирование URI подходит, в других случаях именованные маршруты позволяют следующее:
{{ route('admin.users.show', ['user' => $user]) }}
{{-- /admin/users/2 --}}
При определении группы маршрутов, например, в нашем примере администратора, вы также можете указать префикс имени маршрута в группе:
Route::namespace('Admin')
->prefix('admin')
->name('admin.')
->group(function () {
Route::resource('users', 'UsersController');
});
Приведенное выше имя с префиксом будет генерировать имена маршрутов, подобные следующим, для пользователей контроллера ресурсов:
- Приведенное выше имя с префиксом будет генерировать имена маршрутов, подобные следующим, для
- пользователей
- контроллера ресурсов:
- Приведенное выше имя с префиксом будет генерировать имена маршрутов, подобные следующим, для
- пользователей
- контроллера ресурсов:
- Приведенное выше имя с префиксом будет генерировать имена маршрутов, подобные следующим, для
учить больше
Прочитайте всю документацию по маршрутизации и раздел контроллеры ресурсов документации по контроллерам. Я ссылаюсь на раздел контроллеры ресурсов, чтобы попытаться убедиться, что большинство моих маршрутов представляют собой глагол REST, и для соглашений об именовании маршрутов.