Resource Controllers
Resource Controllers используется в Laravel для простого выполнения операций CRUD. Когда создаем Resource Controllers с помощью команды artisan из терминала, внутри контроллера будут созданы все необходимые методы, связанные с операциями CRUD. Он обрабатывает все HTTP-запросы для приложения и требует одной строки кода для маршрутов.
Подготовка
Нам потребуется таблица в базе данных к которой подключен проект Laravel. В этом руководстве я использовал дефолтную таблицу users для выполнения операции CRUD с использованием Resource Controllers.
Создание Resource Controllers
Выполняем следующую команду из терминала, чтобы создать Resource Controllers с именем UserController:
php artisan make:controller UserController --resource
Открываем созданный контроллер, внутри автоматически создаются семь методов для выполнения CRUD операций:
App/Http/Controllers/UserController.php<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;
class UserController extends Controller
{
// Показать список ресурсов @return \Illuminate\Http\Response
public function index()
{
//
}
// Показать форму для создания нового ресурса @return \Illuminate\Http\Response
public function create()
{
//
}
// Хранить вновь созданный ресурс в хранилище @param \Illuminate\Http\Request $request @return \Illuminate\Http\Response
public function store(Request $request)
{
//
}
// Показать указанный ресурс @param int $id @return \Illuminate\Http\Response
public function show($id)
{
//
}
// Показать форму для редактирования указанного ресурса @param int $id @return \Illuminate\Http\Response
public function edit($id)
{
//
}
// Обновить указанный ресурс в хранилище @param \Illuminate\Http\Request $request @param int $id @return \Illuminate\Http\Response
public function update(Request $request, $id)
{
//
}
// Удалить указанный ресурс из хранилища @param int $id @return \Illuminate\Http\Response
public function destroy($id)
{
//
}
}
Маршруты
Добавьте следующий маршрут для UserController, автоматически будут созданы семь маршрутов, для вызова семи методов дополни:
routes/web.phpRoute::resource('users', UserController::class);
Выполняем следующую команду из терминала и проверяем текущий список маршрутов из файла web.php:
php artisan route:list
Вставка, метод create ()
Измените метод create() контроллера UserController следующим кодом:
App/Http/Controllers/UserController.phppublic function create()
{
$user = new User;
$user->name = 'fahmida';
$user->email = 'fahmida@gmail.com';
$user->password = Hash::make('12345');
try{
$user->save();
echo "Запись вставлена";
}
catch (\Illuminate\Database\QueryException $e) {
echo "Повторяющаяся запись";
}
}
Маршрут для вызова метода create() — название_домена.ru/users/create.
Все записи, метод index ()
Измените метод index() контроллера UserController следующим кодом:
App/Http/Controllers/UserController.phppublic function index()
{
$users = DB::select('select * from users');
foreach($users as $user)
{
echo "Name: $user->name";
echo "<br/>Email:$user->email";
}
}
Маршрут для вызова метода index() — название_домена.ru/users.
Конкретная запись, метод show ()
Измените метод show() контроллера UserController следующим кодом:
App/Http/Controllers/UserController.phppublic function show($id)
{
$user = DB::select('select * from users where id='.$id);
echo "The name of the user is ". $user[0]->name."<br/>";
}
Маршрут для вызова метода show() — название_домена.ru/users/1.
Обновление записи, метод edit ()
Измените метод edit() контроллера UserController следующим кодом:
App/Http/Controllers/UserController.phppublic function edit($id)
{
$user = DB::select('select * from users where id='.$id);
echo "The current email of the user is ". $user[0]->email."<br/>";
$email = 'yesmin@gmail.com';
$user = DB::select("Update users set email='$email'where id=".$id);
$user = DB::select('select * from users where id='.$id);
echo "The email of the user after update is ". $user[0]->email;
}
Маршрут для вызова метода show() — название_домена.ru/users/1/edit.
Удаление записи, метод destroy ()
Метод destroy() предназначен для удаления любой записи из таблицы. А вот маршрут удаления записи проходит от другого метода. Здесь я использовал метод show() для создания гиперссылки для удаления записи, которая добавляется в конце метода.
Измените метод destroy() контроллера UserController следующим кодом:
App/Http/Controllers/UserController.phppublic function show($id)
{
$user = DB::select('select * from users where id='.$id);
echo "The name of the user is ". $user[0]->name."<br/>";
echo "<a href='".url('/')."/users/delete/".$id."'>Delete</a>";
}
Маршрут для вызова метода show() — название_домена.ru/users/1.
Измените метод destroy() контроллера UserController следующим кодом, чтобы удалить определенную запись:
App/Http/Controllers/UserController.phppublic function destroy($id)
{
$user = DB::select('Delete from users where id='.$id);
echo "The record is deleted";
}
Добавьте маршрут в файл web.php для вызова метода destroy():
routes/web.phpRoute::get('/users/delete/{id}' , [UserController::class, 'destroy']);