Рубрики
Uncategorized

Делимся советами по оптимизации маршрутизации Laravel

Автор оригинала: David Wong.

Статья была отправлена профессиональному сообществу разработчиков 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, и для соглашений об именовании маршрутов.