it-blog.club
Роутинг (маршрутизация) и переадресация в Laravel Framework

Роутинг (маршрутизация) и переадресация в Laravel Framework

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

И так. В русском мануале было указанно, что для роутинга нужно использовать файл /app/Http/routes.php , но у меня его не оказалось и вместо того, что бы просто его создать, я решил залезть в официальный мануал и посмотреть, что сказано там. И как раз там было сказано следующее.

Маршрутизация в Laravel Framework настраивается в файле /routes/web.php куда я сразу и заглянул.

Действительно, содержание данного файла полностью было похоже на правила адресов внутри фраемворка.


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

Собственно именно это я и ожидал увидеть, после работы на yii2

Теперь ради теста давайте добавим новое правило ниже, просто прописав:


Route::get('foo/{id}', function ($id) {
return 'Hello, id = '.$id;
});

Спасибо официальной доке, так как данный пример по сути взят от туда и немного дополнен.

Теперь, если вы перейдёте в браузере по урлу ВАШ_ПРОЕКТ/foo/12 , то увидите на странице: Hello, id = 12

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


Route::get('blog/{id}/post/{postId}', function ($id,$postId) {
return 'Blog = '.$id,', Post = '.$postId;
});

Перейдём по адресу ВАШ_ПРОЕКТ/blog/1/post/2 и увидим на странице: Blog = 1, Post = 2


Редиректы и переадресация

Но это разумеется не всё. Так же мы можем сделать переадресацию используя стандартные методы фраемворка.


Route::redirect('/apple','/samsung',301);

Так же не сложная функция, которая отвечает за редирект. Имеет всего 3 параметра. 1) откуда 2) куда 3) И код редиректа для браузера и поисковика.


Представления

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

И так, давайте же вызовем представление.


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

или так:


Route::view('hello','hello');

Теперь если мы перейдём по адресу ВАШ_ПРОЕКТ/hello то у нас будет произведён вызов вьюхи под названием hello.blade.php, которую разумеется нужно создать по адресу /resources/views/hello.blade.php . Давайте сделаем это. Пройдём по нужному пути, создадим файл со следующим содержанием:


echo 'Hi!';

Теперь в браузере перейдём по урлу указанному выше и мы сможем увидеть на станице слово Hi!

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


Route::view('hello','hello',['name'=>'Your name']);

И поменяем наш hello.blade.php


<h1>Hi! {{ $name }}</h1>

Зайдём на страницу и увидим заголовок в котором будет содержаться: Hi! Your name

Как видите мы выведи содержимое переменной $name не используя echo или = , а вывели непосредственно в html вёрстки.

Давайте сделаем нашу задачу более сложной и будем передавать необходимые для вывода имена:


Route::get('hello/{name}', function ($name) {
return view('hello',['name'=>$name]);
});

В вёрстке можно ничего не менять и перейти по адресу: ВАШ_ПРОЕКТ/hello/yaroslav (ну или введите чего нибудь своё). В любом случае вы увидите на странице всё тот же заголовок только в нём уже будут те имена, которые вы указываете в адресной строке.


Контроллеры

Теперь давайте вызовем какой нибудь контроллер используя правила маршрутизации. Пропишем в наш web.php следующее:


Route::get('hello/{name}', 'HelloController@show');

И так, в наше правило входит 1) адрес 2) конструкция КЛАСС @ МЕТОД

Как вы наверняка уже поняли, нам потребуется создать данный контроллер. Давайте же сделаем это.

Нам необходимо создать php файл, который будет содержать класс который мы пытаемся вызвать. Называться сам файл кстати будет так же. Перейдём в директорию /app/Http/Controllers/ и создадим файл HelloController.php Вот его содержимое:


namespace App\Http\Controllers; //Наше пространство имён
use App\Http\Controllers\Controller; //Класс от которого будем наследоваться

class HelloController extends Controller
{
//Метод который мы вызвали в правиле маршрутизации
public function show($name) {
return view('hello',['name'=>$name]);//Просто вызываем вьюху
}
}

Теперь если мы перейдём по адресу: ВАШ_ПРОЕКТ/hello/yaroslav (ну или что нибудь ваше), то ничего не поменяется)) Ибо мы просто вызов вьюхи перенесли в метод и сделали тоже самое.


Разумеется это далеко не всё. Но по крайней мере теперь должно стать ясно как нужно использовать маршрутизацию в Laravel Framework. Ну и разумеется ссылка на оф доку, где описаны все возможности и вариации.


Кстати, если вам понравилась статья и вы только начинаете знакомство с данным фраемворком, то советую почитать вот эту статью, которая посвящена простой установке через composer


it-blog.club 1129
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать