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']);