Литмир - Электронная Библиотека

При нажатии кнопки submit на этой форме данные будут отправлены на POST-маршрут site.com/zombie.

Обратите внимание на передачу @csrf и дополнительного указания метода. Указание метода необходимо из-за того, что в HTTP не существует метода ‘PATCH’. Таким образом мы даем понять Laravel, какое именно действие нужно совершить с данными из этой формы.

Пример быстрой маршрутизации

Представьте, что перед вами стоит задача убить (удалить) зомби-изгоя! Сначала необходимо создать форму:

<form method="POST" action="/zombie">

@csrf

@method(DELETE)

<input type="hidden" name="id" value="2">

<input type="submit" value="Destroy">

</form>

На ней отображается кнопка "Уничтожить". Для простоты мы жестко задали идентификатор 2, который, как правило, зависит от конкретного зомби.

Далее, давайте составим маршрут:

<?php

use Illuminate\Http\Request; Route::delete('/zombie', function(Request $request){

$id = $request->id; Zombie::destroy($id);

});

И вот уже нет проблемного зомби с идентификатором 2! Обратите внимание на включение класса Request из Laravel, который перехватывает данные запроса. Вам придется не забыть объявить пространство имен, когда вы захотите использовать объект запроса.

Внимание! Этот пример пока не будет полностью рабочим, так как наша база данных и модели еще находятся в процессе создания. Мы займемся этим в ближайшее время.

Мы использовали закрытие маршрутов. Далее обсудим разницу между закрытием маршрутов и контроллерами маршрутов.

Закрытие маршрута и действия контроллера маршрута

Закрытие маршрута – это непосредственная функция, содержащая код, как показано здесь:

Route::get('/zombie', function(){

echo 'Greetings from the Zombie Page!';

});

Для действия контроллера маршрута мы указываем, какой метод контроллера следует вызвать:

Route::get('/zombie', [ZombieController::class, 'index']);

Обращение к /zombie вызывает метод index в ZombieController.

Более подробно мы рассмотрим контроллеры в ближайшее время. Запомните эти различия, и они станут более понятными.

Параметры маршрута

Иногда маршруты требуют параметров.

Например, для просмотра конкретного зомби по адресу site.com/zombie/5 требуется включить в маршрут параметр:

Route::get('/zombie/{id}', function($id){

echo "You've encountered a zombie with ID: " . $id;

});

Если наши модели и база данных работают, то это позволит получить и отобразить информацию о конкретном зомби:

Route::get('/zombie/{id}', function($id){

$zombie = Zombie::find($id);

echo 'Name: ' . $zombie->name . '<br />';

echo 'Strength: ' . $zombie->strength . '<br />'; echo 'Health: ' . $zombie->health . '<br />';

});

Напоминаем, что наша настройка не завершена, поэтому данный пример пока не будет работать идеально. С учетом сказанного, в следующей теме мы рассмотрим все это вместе.

Laravel – гайд по выживанию - _6.jpg
Laravel – гайд по выживанию - _6.jpg

3. Модели

Laravel – гайд по выживанию - _7.jpg

Зомби-разработчики часто используют сложные запросы, которые могут привести к плохому и зараженному коду. Как разработчик Laravel, мы должны поддерживать наши запросы сильными и здоровыми.

Что же такое модели?

В Laravel модель – это PHP-класс, который управляет взаимодействием между кодом вашего приложения и базой данных. Расширение класса Laravel Eloquent Model позволяет сделать эти взаимодействия простыми и понятными.

Модель Zombie

Возьмем, к примеру, модель Zombie, которая будет размещена по адресу /app/Models/Zombie.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model; class Zombie extends Model {

protected $table = 'zombies';

}

Этот код сообщает Laravel, что класс Zombie соответствует таблице zombies в вашей базе данных. Гипотетическая таблица zombies может выглядеть следующим образом:

zombies table

Laravel – гайд по выживанию - _8.jpg

Совет: Laravel автоматически управляет полями updated_at и created_at, если они существуют, регистрируя временные метки для новых добавленных строк и любых обновлений. Данные поля не нужно создавать. При написании миграции достаточно добавить timestamps(), но об этом позже.

Предположим, что у нас есть эта таблица в нашей базе данных. В одной из следующих глав мы обсудим миграции, которые позволяют нам легко создавать таблицы базы данных через наш код.

Теперь, когда вышеупомянутая таблица создана, мы можем взаимодействовать с базой данных с помощью Eloquent.

Eloquent: ORM в Laravel

Eloquent, ORM (Object-Relational Mapper) в Laravel, упрощает и украшает работу с базой данных. Вспомним код из предыдущего раздела:

<?php

use App\Models\Zombie; Route::get('/zombie/{id}', function($id){

$zombie = Zombie::find($id);

echo 'Name: ' . $zombie->name . '<br />';

echo 'Strength: ' . $zombie->strength . '<br />'; echo 'Health: ' . $zombie->health . '<br />';

});

Если раньше наше приложение не могло найти класс Zombie, то с появлением модели мы можем обращаться к нему без проблем.

Стоит отметить, что, вызывая Zombie, мы обращаемся именно к классу Zombie, расположенному по адресу App\Models\Zombie. Это понятие известно, как пространство имен, которое мы рассмотрим в одной из следующих глав.

Тем не менее, препятствие все еще существует.

Не имея в базе данных ни одного зомби, мы не можем получить доступ к упомянутому выше маршруту. Поэтому давайте создадим нового зомби по приведенному ниже маршруту:

<?php

Route::get('/admin/zombies/create', function(){

echo '<form method="POST" action="/admin/zombies/create">

3
{"b":"857873","o":1}