Маршрутизація, laravel по-російськи

Файли маршрутів за замовчуванням

Всі маршрути (routes) Laravel визначені в файлах маршрутів, які розташовані в каталозі routes. Ці файли автоматично завантажуються фреймворком. У файлі routes / web.php визначені маршрути для вашого web-інтерфейсу. Ці маршрути входять в групу посередників web. які забезпечують такі можливості, як стан сесії і CSRF-захист. Маршрути з файлу routes / api.php не підтримують стану і входять до групи посередників api.

Для більшості додатків спочатку визначаються маршрути в файлі routes / web.php.

Файл routes.php завантажується провайдером RouteServiceProvider і автоматично включається в групу посередників web. що забезпечує доступ до стану сесії і CSRF-захист. Більшість маршрутів вашого додатки будуть визначені в цьому файлі.

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

Маршрутизатор дозволяє реєструвати маршрути для будь-якого HTTP-запиту:

Іноді необхідно зареєструвати маршрут, який відповідає на HTTP-запити декількох типів. Це можна зробити шляхом PHP match (). Або ви можете зареєструвати маршрут, який відповідає на HTTP-запити всіх типів, за допомогою методу PHP any ():

Реєстрація маршруту для декількох типів запитів

Іноді необхідно зареєструвати маршрут, який відповідає на HTTP-запити декількох типів. Це можна зробити шляхом PHP match () фасаду Route:

Або ви можете зареєструвати маршрут, який відповідає на HTTP-запити всіх типів, за допомогою методу PHP any ():

Ви можете генерувати URL для маршрутів вашого застосування методом PHP url ():

параметри маршрутів

обов'язкові параметри

Зрозуміло, іноді вам може знадобитися захопити сегменти URI в вашому маршруті. Наприклад, якщо вам необхідно захопити ID користувача з URL. Це можна зробити, визначивши параметри маршруту:

Ви можете визначити скільки завгодно параметрів:

Параметри маршруту завжди полягають у фігурні дужки і повинні складатися з буквених символів. Параметри маршруту не можуть містити символ -. Використовуйте замість нього підкреслення _.

Необов'язкові параметри маршруту

Іноді необхідно вказати параметр маршруту, але при цьому зробити його наявність необов'язковим. Це можна зробити, помістивши знак питання. після назви параметра. Не забудьте поставити значення за замовчуванням для відповідної змінної маршруту:

Обмеження регулярними виразами

Ви можете обмежити формат параметрів вашого маршруту за допомогою методу PHP where () на примірнику маршруту. Метод PHP where () приймає назву параметра і регулярний вираз, що визначає обмеження для параметра:

Якщо ви хочете, щоб параметр був завжди обмежений заданим регулярним виразом, то можете використовувати метод PHP pattern (). Вам слід визначити ці шаблони в методі PHP boot () вашого RouteServiceProvider:

CSRF-захист

Даний розділ актуальний для версії 5.2 і раніше. У версії 5.3 він був перенесений в окрему статтю про CSRF.

Кожен раз визначаючи HTML-форму в своєму додатку, ви повинні включати в неї приховане поле CSRF-токена, щоб посередник CSRF-захисту зміг перевірити запит. Щоб згенерувати приховане поле вводу _token. що містить CSRF-токен, використовуйте допоміжну функцію PHP csrf_field ():

Функція PHP csrf_field () генерує такий HTML:

Вам не потрібно вручну перевіряти CSRF-токен в запитах типу POST, PUT або DELETE. посередник VerifyCsrfToken. який входить до групи посередників web. буде автоматично перевіряти збіг токена вхідного запиту з токеном, що зберігаються в сесії.

Виняток URI з CSRF-захисту

Іноді буває необхідно виключити набір URI з CSRF-захисту. Наприклад, при використанні Stripe для обробки платежів і їх системи веб-хуков вам необхідно виключити ваш маршрут обробника веб-хуков з CSRF-захисту Laravel.

Ви можете виключити URI, визначивши їх маршрути поза групою посередників web. яка включена в файл за умовчанням routes.php. або додавши ці URI в властивість PHP $ except посередника VerifyCsrfToken:

X-CSRF-TOKEN

Крім пошуку CSRF-ключа в параметрах «POST». посередник VerifyCsrfToken також перевірить наявність заголовка запиту X-CSRF-TOKEN. Наприклад, ви можете зберігати ключ в тезі «meta»:

Коли ви створили тег meta. ви можете додавати токен в заголовки всіх запитів за допомогою бібліотеки, такий як jQuery. Так забезпечується проста і зручна CSRF-захист для ваших додатків на основі AJAX:

X-XSRF-TOKEN

Різниця між X-CSRF-TOKEN і X-XSRF-TOKEN в тому, що перший використовує просте текстове значення, а другий - шифрування значення, тому що cookie в Laravel завжди шифруються. Якщо для передачі значення ключа ви використовуєте функцію PHP csrf_token (). то вам ймовірно потрібно використовувати заголовок X-CSRF-TOKEN.

прив'язка моделі

При впровадженні ID моделі в дію маршруту або контролера буває часто необхідно отримати модель, яка відповідає цьому ID. Прив'язка моделей - зручний спосіб автоматичного впровадження екземплярів моделі безпосередньо в ваші маршрути. Наприклад, замість впровадження ID користувача ви можете впровадити весь екземпляр моделі User. який відповідає даному ID.

неявна прив'язка

Laravel автоматично включає моделі Eloquent, певні в діях маршруту або контролера, чиї змінні мають імена, що збігаються з сегментом маршруту. наприклад:

У цьому прикладі Laravel автоматично запровадить екземпляр моделі, який має ID, що співпадає з відповідним значенням з URI запиту, тому що змінна Eloquent PHP $ user. певна в маршруті, збігається з сегментом URI маршруту. Якщо збігається екземпляр моделі не знайдений в базі даних, буде автоматично згенерований HTTP-відгук 404.

Якщо ви хочете, щоб для отримання класу даної моделі замість стовпчика id використовувався інший стовпець бази даних, ви можете перевизначити метод PHP getRouteKeyName () в своїй моделі Eloquent:

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

Для реєстрації явною прив'язки використовуйте метод маршруту PHP model () для вказівки класу для даного параметра. Вам треба визначити явні прив'язки вашої моделі в методі PHP boot () класу RouteServiceProvider: