Урок 1. Laravel контроллеры
видим, самый верхний слой, там где обычно лежит html в Laravel называется view (вид, вьюха). Все вьюхи лежат по адресу resources/view. Давайте в этой папке создадим свою вьюху для отображения главной страницы: home.blade.php
Чтобы отправить пользователя по этому адресу мы должны указать путь до него. Это делается в файле роутов routes/web.php
Route::get(‘/’, function () {
return view(‘home’)
});
(При вызове любого статического метода у Route нужно попробовать из контейнера найти роутер вернуть этот объект роутер и вызвать у него метод get (фасад Router))
Метод view возвращает блейд по его названию, путь до папки и расшерние указывать не надо.
Во view можно передать вторым параметром массив с данными:
return view(‘home’, [‘id’=>10, ‘myid’=>12])
В блейде переменные из массива можно будет вызвать так:
{{ $id }}
Контроллеры
Обычно роуты передают управление контроллерам
Route::get(‘/posts’, [PostController::class, ‘index’]);
Первый параметр это путь, далее в массиве передаем название контроллера PostController::class и метод который у него надо вызвать ‘index’
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
// Метод для отображения списка постов
public function index()
{
$posts = Post::all();
return view(‘posts.index’, compact(‘posts’));
}
Ресурсные контроллеры
При создании ресурсного контроллера создается сразу несколько адресов которые он способен обрабатывать. Обращение к ресурсному контроллеру в файле роутов выглядит так:
Route::resource(‘/posts’, PostController::class);
Действия ресурсного контроллера, и адреса которые он обрабатывает.
| Метод | URI | Действие | Имя маршрута | Расшифровка действия |
|---|---|---|---|---|
| GET | /posts | index | posts.index | показать все |
| GET | /posts/create | create | posts.create | создать |
| POST | /posts | store | posts.store | сохранить |
| GET | /posts/{post} | show | posts.show | показать конкретный |
| GET | /posts/{post}/edit | edit | posts.edit | отображение формы редактирования |
| PUT/PATCH | /posts/{post} | update | posts.update | сохранить редактирование |
| DELETE | /posts/{post} | destroy | posts.destroy | удалить |
Пример кода ресурсного контроллера:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return ‘posts list’;
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
return 'post create form';
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(Request $request, string $id)
{
dump($request->get('a'));
return $id;
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
Во всех контроллерах присутствует use Illuminate\Http\Request — это объект который содержит в себе все что есть в запросе. Laravel перед тем как вызывать метод контроллера сам определяет что этому методу нужно. Это тема в php называется рефлексия.
Пример:
Laravel увидел что сейчас будет вызван /posts/{post}/edit, он создает экземпляр контроллера, но не сразу вызывает его метод edit. Он создает reflection класс, который узнает какие параметры хочет метод edit.
Например встречая код public function show(Request $request, Post $post) Laravel понимает что нужно создать экземпляр модели Post которая найдет по этому id сущность в базе.
Сервис провайдеры, контейнеры зависимостей и фасады в Ларе требуют знания ООП

Свежие комментарии