В этом уроке мы рассмотрим пример маршрутизации в Ларавел. Сначала мы просто потренируемся, сделаем тестовый контроллер и тестовый маршрут к нему. Создайте наш тестовый контроллер, используя в консоли команду:
php artisan make:controller RestTestController --resource
Обратите внимание, что в команде есть ключ --resource это означает, что в нашем контроллере уже будут готовые REST функции. Я надеюсь, что вы знакомы с технологией REST, если же нет, то советую ознакомиться. В папке \app\Http\Controllers по умолчанию находятся контроллеры, которые вы создаете. Перейдите в эту папку и вы увидите RestTestController, который вы создали.
Тут вы увидите различные методы, разберемся по каждому, для чего они нужны: Функция index() - вывод списка, к примеру если у нас это контроллер наших постов, то он выводит список постов Функция create() - создание новой сущности, например нашей статьи, т.е. страница на которой мы будем писать наши статьи Функция store() - сохраниние нашей сущности в бд, т.е. после того как мы написали нашу статью, нажимаем кнопку сохранить и вызывается функция store Функция show($id) - показ сущности по id Функция edit($id) - создание страницы редактирования сущности Функция update($request, $id) - когда мы нажали кнопку сохранить на странице редактирования, мы должны попасть в функцию update Функция destroy($id) - удалить из базы данных
Создадим наш первый маршрут, откройте файл routes\web.php и добавьте туда такой код:
Route::resource('rest', 'RestTestController')->names('restTest');
Смотрите первое слово rest это наш путь к страничке, далее мы говорим, какой контроллер, в нашем случае это RestTestController и зададим имя этого маршрута restTest
Вернемся к нашему контроллеру, откройте файл \app\Http\Controllers\RestTestController.php и измените метод index следующим образом
public function index() { return 1; }
Теперь откройте браузер перейдите по страничке ваш_домен/rest и вы должны будете увидеть 1.
Настало время создать контроллеры и маршруты, которые действительно будут нужны нашему блогу. Выполните команды:
php artisan make:controller Blog/BaseController php artisan make:controller Blog/PostController --resource
Сделаем наш класс BaseController абстрактным потому что от него мы будем только наследоваться, откройте файл \app\Http\Controllers\Blog\BaseController.php и измените его следующим образом:
<?php namespace App\Http\Controllers\Blog; use Illuminate\Http\Request; use App\Http\Controllers\Controller; abstract class BaseController extends Controller { // }
И изменим файл \app\Http\Controllers\Blog\PostController.php укажем, что он будет наследоваться от базового контроллера блога
Удалим в нем строчку
use App\Http\Controllers\Controller;
Добавим строчку
use App\Models\BlogPost;
И изменим строчку: class PostController extends Controller на это
class PostController extends BaseController
В методе index() вставим следующий код:
public function index() { $items = BlogPost::all(); return view('blog.posts.index',compact('items')); }
Расскажу, что происходит в этом методе, строчка $items = BlogPost::all(); получает из базы данных наши посты
Строчка return view('blog.posts.index',compact('items')); передает эти данные в наш html шаблон, но вы наверное уже поняли, что шаблона для наших постов у нас пока нет, поэтому создадим его. Создайте файлик \resources\views\blog\posts\index.blade.php с таким содержимым:
<table> @foreach($items as $item) <tr> <td>{{$item->id}}</td> <td>{{$item->title}}</td> <td>{{$item->created_at}}</td> </tr> @endforeach </table>
Создадим теперь маршрут к нашим постам, для этого откройте файл routes\web.php и добавьте следующий код:
Route::group(['namespace' => 'Blog', 'prefix' => 'blog'], function(){ Route::resource('posts', 'PostController')->names('blog.posts'); });
Теперь, если вы откроете в браузере страничку /blog/posts вы увидите список ваших записей.
Посмотреть список всех ваших маршрутов вы можете выполнив в консоли команду php artisan route:list и вы увидите список ваших маршрутов:
С маршрутами думаю все понятно, в следующем уроке мы сделаем страницы с авторизацией и регистрацией пользователя, а также поставим верстку из коробки.