кодесурса
«Laravel

Laravel (5,7) Маршрутизация

script1adsense2code
script1adsense3code

Одна из самых крутых возможностей в Laravel Framework - это функция маршрутизации. Маршрутизация - это возможность сопоставления запросов URL с конкретными маршрутами. Это просто способ создания URL-адреса запроса вашего приложения. В Laravel все запросы отображаются с помощью маршрутов. Базовая маршрутизация направляет запрос к связанным контроллерам. Мы рассмотрим маршрутизацию подробно в этих подтемах.

  • Базовая маршрутизация
    - Перенаправить маршруты
    - Просмотр маршрутов
  • Параметры маршрута
    - Обязательные параметры
    - Необязательные параметры
  • Названные маршруты
  • Группы маршрутов
    - Middleware
    - Пространства имен
  • Привязка модели маршрута
    - неявное связывание
    - Явное связывание
  • Запасные маршруты
  • Форма Спуфинг
  • Доступ к текущему маршруту

Базовая маршрутизация

Все маршруты в приложении laravel регистрируются в файле rout / web.php. Когда вы настраиваете проект laravel с помощью команды laravel new app , основной каталог приложения содержит подкаталог маршрутов, который содержит файл web.php, в котором определены маршруты. Первоначально файл web.php должен выглядеть следующим образом;

Route::get('/', function () {
   return view('welcome');
});

Приведенный выше фрагмент кода говорит браузеру, что нужно возвращать окно приветствия при вводе URL по умолчанию. Представления находятся в каталоге resources / views. В этом случае запрос сопоставляется с файлом resources / views / welcome.blade.php. Самым распространенным способом определения маршрутов является присоединение указанного маршрута к связанному контроллеру, который обрабатывает все действия, происходящие в маршруте. Например;

Route::get('/user', '[email protected]');

Таким образом, это связывает '/ user' с контроллером ' [email protected] '. URI (унифицированный идентификатор ресурса) в этом случае в «/ user», в то время как соответствующая функция обратного вызова является контроллером [email protected] .

Доступные методы маршрутизатора

Маршрутизатор позволяет регистрировать маршруты, которые отвечают на любой HTTP-глагол:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

Перенаправить маршруты

Существуют различные методы, которые laravel предоставляет на фасаде Route. Одним из них является метод перенаправления. Как следует из названия метода, этот метод полезен, когда вы определяете URI, который перенаправляет на другой маршрут. Вот как это используется;

Route::redirect('/user', '/admin');

Это означает, что если вы попытаетесь получить доступ к маршруту '/ user', вы будете перенаправлены на маршрут '/ admin'. Разве это не мило?

Посмотреть маршруты

Другим методом, доступным для фасада Route, является метод view. Этот метод полезен только тогда, когда ваш маршрут возвращает только вид. Метод view принимает два обязательных аргумента и один необязательный аргумент. Первый - это URI, на который вы нацелены, а второй - это название представления, которое вы хотите отобразить.

Route::view('/user', 'user');

Параметры маршрута

Параметры маршрута - это именованные сегменты URL, которые используются для захвата значений, указанных в их позиции в URL. Существует два способа определения параметров маршрута в Laravel. Они есть;

Обязательные параметры

Как следует из названия, это параметры, которые должны быть обязательно перехвачены для маршрутизации веб-приложения. Например, идентификационный номер пользователя.

Route::get('user/{id}', function ($id) {
   return $id;
});

Эти параметры вводятся в качестве аргументов в обратных вызовах маршрута.

Необязательные параметры

Основное различие между обязательными параметрами и необязательными - включение? после имени параметра в URL. Также важно не забыть указать значение по умолчанию для имени параметра в функции обратного вызова. Вот что я имею в виду;

Route::get('user/{name?}', function ($name ="John" ) {
   return 'My name is ' .$name;
});

Названные маршруты

Именованные маршруты позволяют удобный способ создания маршрутов. Это делается путем присоединения метода имени к определению маршрута.

Route::get('user/details', function () {
   //
})->name('details');

В следующем коде показан пример создания именованных маршрутов с контроллером

Route::get('user/details', ''[email protected]')->name('details');

Группы маршрутов

Группы маршрутов позволяют совместно использовать атрибуты маршрутов по ряду маршрутов без необходимости определения этих атрибутов для каждого отдельного маршрута. Общие атрибуты указываются в формате массива в качестве первого параметра метода Route :: group. Как видно ниже;

Route::group(['namespace' => 'Admin', 'prefix' => 'admin')(function () {
    Route::get('/', function () {});

Промежуточное

Используя метод промежуточного программного обеспечения на фасаде Route, вы можете назначить промежуточное программное обеспечение для всех маршрутов в группе.

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
       // Uses first & second Middleware
    });
    Route::get('user/profile', function () {
       // Uses first & second Middleware
    });
});

Пространства имен

Используя метод пространства имен, вы можете зарегистрировать контроллер группы, используя то же пространство имен PHP. Это еще одно использование групп маршрутов.

Route::namespace('Admin')->group(function () {
   // Controllers Within The "App\Http\Controllers\Admin" Namespace
});

Привязка модели маршрута

Привязка модели маршрута в Laravel предоставляет механизм для внедрения экземпляра модели в ваши маршруты. Скажем, мы хотим получить сообщение из базы данных, мы могли бы сделать что-то вроде этого:

Route::get('posts/{id}', function ($id) {
       // we have to find the post using the $id
        $posts = Post::find($id);
       // if there is no post, 404
       if (!$posts) return abort(404);
      // return the view and the post
      return view('post.show', compact('post'));
    });

Но привязка модели маршрута помогает нам избавиться от лишних нажатий клавиш, упрощая приведенный выше пример в

Route::get('posts/{post}', function ($post) {
    // we now have access to the $post object! no code necessary
    // return the view and the post
    return view('post.show', compact('post'));
});

Это стало возможным, сказав Laravel внедрить модель Post в любой контроллер маршрута, к которому присоединен параметр {post}.

В Laravel есть два типа привязки моделей. Неявное связывание и явное связывание

Неявное связывание

Route::get('posts/{post}', function (App\Post $post) {
    // be awesome. enjoy having the $post object
});

Laravel знает, что, поскольку модель Post внедряется в замыкание контроллера, он должен получить параметр id из маршрута и получить детали для пользователя.

Изменение ключа маршрута модели

Если вы хотите, чтобы при получении моделей неявная привязка модели использовала столбец базы данных, отличный от id, вы можете переопределить метод getRouteKeyName в своей модели Eloquent. Например, если мы хотим использовать слаг вместо идентификатора, мы можем сделать следующее:

class Post extends Model {
    public function getRouteKeyName() {
        return 'slug';
    }
}

Явная привязка

Как следует из названия, вы должны явно указать laravel, что хотите, чтобы он связывал параметр URL с конкретной моделью. Есть два способа сделать это: мы могли бы привязать параметр к модели, используя предоставленный фасад Route, или выполнить это связывание в app / Providers / RouteServiceProvider.php.

Используя Фасад Маршрута

Используя фасад Route для привязки параметра к модели, мы можем сделать что-то вроде этого:

Route::bind('post', 'App\Post');

Мы также могли бы придать нашему связыванию больше смысла, например, что, если мы хотим, чтобы публикация была только в том случае, если это черновик? Для этого мы могли бы изменить второй параметр Route :: bind на замыкание, которое принимает параметр маршрута в качестве своего значения.

Route::bind('post', function ($value) {
    return App\Post::find($value)->where('status', '=', 'published')->first();
});

Использование RouteServiceProvider

Единственное различие между использованием фасада Route и класса RouteServiceProvider заключается в том, что регистрация привязок выполняется в методе загрузки класса RouteServiceProvider (расположение - каталог app / Providers), а метод привязки вызывается для объекта $ router, введенного в метод. , Быстрый пример

public function boot(Router $router)
{
    parent::boot($router);
    $router->bind('post', function ($value) {
        return App\Post::find($value)->where('status', '=', 'published')->first();
    });
}

Запасные маршруты

Используя метод отката на фасаде Route, вы можете определить маршрут, к которому будет возвращаться, когда никакой другой маршрут не соответствует входящему запросу.

Route::fallback(function () {
   //
});

Форма Спуфинг

HTML-формы не поддерживают действия PUT, PATCH или DELETE. Таким образом, при определении маршрутов PUT, PATCH или DELETE, которые вызываются из формы HTML, вам необходимо добавить в форму скрытое поле _method. Значение, отправленное с полем _method, будет использоваться как метод HTTP-запроса:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

Доступ к текущему маршруту

Вы можете использовать методы current, currentRouteName и currentRouteAction на фасаде Route для доступа к информации о маршруте, обрабатывающем входящий запрос:

$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();

Предыдущий: Laravel (5.7) Контракты
Далее: Laravel (5.7) Промежуточное ПО

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code