Laravel – гайд по выживанию

Nulls, 2023

Почему эта книга? На самом деле, это не совсем книга. Это большепохоже на руководство – руководство, чтобы уберечь вас и других отпревращения в «зомби-разработчиков». Что такое «зомби-разработчик»? Эторазработчик, похожий на нас, который безраздельно занимается созданиемприложений на PHP, повторяя одни и те же задачи снова и снова. Этиповторяющиеся задачи могут быть утомительными и привести красплавлению мозга. Когда это происходит, разработчики повсюдупревращаются в безмозглых зомби, жаждущих крови и порывающихсяубивать.Однако есть лекарство: фреймворк Laravel, разработанный для быстройразработки приложений. Освоив Laravel, вы сможете заново открыть в себестрасть к кодингу и побороть "зомби". Это руководство призвано сохранитьваше здравомыслие, сделав кодинг снова приятным занятием. И да, этоможет спасти жизнь!Освоив основы Laravel, вы сможете уберечь себя и, возможно, другихот превращения в бездумного зомби-разработчика.

Оглавление

* * *

Приведённый ознакомительный фрагмент книги Laravel – гайд по выживанию предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

3. Модели

Зомби-разработчики часто используют сложные запросы, которые могут привести к плохому и зараженному коду. Как разработчик 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 автоматически управляет полями 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">

<input type="text"name="name"placeholder="Name"><br>

<input type="text"name="strength"placeholder="Strength"><br>

<input type="text"name="health"placeholder="Health"><br>

<input type="hidden"name="_token"value="'. csrf_token(). '">

<input type="submit"value="Create New Zombie">

</form>';

});

При посещении этого маршрута в браузере (site.com/admin/zombies/create) отображается простая форма.

При отправке формы данные публикуются в файл

site.com/admin/zombies/create POST-маршрут, который должен выглядеть следующим образом:

<?php

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

// создаем нового зомби

});

Добавив следующую реализацию:

<?php

use App\Models\Zombie;

use Illuminate\Http\Request;

Route::post('/admin/zombies/create', function(Request $request){

// instantiate a new zombie

$zombie = new Zombie();

$zombie->name = $request->name;

$zombie->strength = $request->strength;

$zombie->health = $request->health;

$zombie->save();

echo 'Zombie Created';

});

И затем отправить форму со следующими данными:

Имя: Johnny Bullet Holes

Strength: Сильный

Здоровье: 70

Вы получите сообщение 'Zombie Created'. При просмотре нашей базы данных обнаруживается новая запись.

Впечатляет, не правда ли? Однако вместо того, чтобы вручную указывать имя, силу и здоровье, Laravel позволяет использовать более лаконичный подход:

<?php

use App\Zombie;

use Illuminate\Http\Request;

Route::post('/admin/zombies/create', function(Request $request){

// instantiate a new zombie using posted data

$zombie = Zombie::create($request->all());

echo 'Zombie Created';

});

При попытке использовать этот маршрут может возникнуть ошибка 'MassAssignmentException'. Это означает, что мы пытаемся выполнить массовое назначение классу"Зомби", не указав допустимые поля. В Laravel такая защита предусмотрена по умолчанию.

Чтобы разрешить массовое присвоение для атрибутов имени, силы и здоровья в нашем классе Zombie, просто добавьте:

protected $fillable = ['name', 'strength', 'health'];

Переделанный класс выглядит следующим образом:

<?php namespace App\Models;

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

protected $table = 'zombies';

protected $fillable = ['name', 'strength', 'health'];

}

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

Предположим, что мы создали еще одного зомби:

Имя: Ted Manwalking

Strength: Слабый

Здоровье: 90

Тогда в нашей базе данных появятся следующие записи:

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

Оглавление

* * *

Приведённый ознакомительный фрагмент книги Laravel – гайд по выживанию предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

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

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я