Контроллеры
Контроллеры в laravel - это те же контроллеры что и предполагаются паттерном проектирования mvc
. Располагаются контроллеры в директории project.loc/app/Http/Controllers/
.
Ссылка на русскоязычное сообщество - https://laravel.ru/docs/v5/controllers;
Ссылка на оригинальную документацию - https://laravel.com/docs/7.x/controllers#introduction
Создадим контроллер на примере REST
.
php artisan make:controller RestTestController --resource
Таким образом, в папке project.loc/app/Http/Controllers/
создался RestTestController.php
. В него из коробки взодят следующие методы:
- index. Выводит список ресурсов;
- create. Показывает форму создания нового ресурса;
- store. Осуществляет сохранение информации по вновьсоздаваемогму ресурсу в БД;
- show. Показывает ресурс по id;
- edit. Показывает форму редактирования ресурса;
- update. Осуществляет сохранение данных по редактируемому ресурсу;
- destroy. Удаляет ресурс из базы.
Для теста можно прописать метод index
следующим образом:
public function index()
{
dd(1);
}
Примечание. dd - это функция-дампер, которая входит в laravel.
Далее необходимо объяснить приложению как получить результат работы контроллера. Для этого существую маршруты.
Маршруты
Маршруты находятся в директории project.loc/routes/
.
За генерацию представления отвечает маршрут web.php
. Из коробки его содержимое следующее:
Route::get('/', function () {
return view('welcome');
});
Добавляем туда:
Route::resource('rest', 'RestTestController')->names('restTest');
Таким образом, мы задаем имя маршрута для ресурса - rest
, отвечать за него будет - RestTestController
.
Проверить весь список маршрутов можно командой:
php artisan route:list
Список выглядит следующим образом:
После того как указали маршрут, можно попробовать зайти по адресу project.loc/rest
и там должны увидеть результат выполнения dd()
:
Или указать в контроллере в методе Index вывод той же преветственной страницы
return view('welcome');
Контроллеры приложения
Запускаем в терминале следующие команды:
php artisan make:controller Blog/BaseController
php artisan make:Controller Blog/PostController --resource
Таким образом, мы создали директорию Blog в директории с контроллерами, а также базовый контроллер и контроллер для поста в ней.
Базовый контроллер предполагается абстрактным. От него будут наследоваться все другие контроллеры, например, тот же PostController.
Прописываем в BaseController:
<?php
namespace App\Http\Controllers\Blog;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
abstract class BaseController extends Controller
{
//
}
Прописываем в PostController, заодно заполним метод index:
<?php
namespace App\Http\Controllers\Blog;
use App\Models\BlogPost;
use Illuminate\Http\Request;
class PostController extends BaseController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//Так рекомендуется делать только для тестов т.к. ресурсов может быть много и будет сгенерировано много объектов, что сильно затормозит систему
$items = BlogPost::all();
return view('blog.posts.index', compact('items'));
}
...
Примечание. compact() создает именованые плейсхолдеры для представления.
Таким образом, будет создан массив данных, который будет передан в шаблон blade.
Представления
Представления находятся в директории project.loc/resources/views/
.
Создание представлений через терминал в laravel не предусмотрено, поэтому создаем там руками директорию 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>