Laravel – самый известный и широко используемый фреймворк PHP.
Люди говорят, что он прост в использовании и очень приятен. Однако поначалу он может показаться немного подавляющим, особенно если вы пришли из таких фреймворков, как Express и Django, “Illuminate” ? “Миграции”? О боже!
Эта статья не является учебником как таковым, но ее цель – дать вам вводное представление о том, что все это значит, чтобы вы могли лучше ознакомиться с этим. Я советую вам также прочитать официальную документацию,
Давайте начнем!
Оглавление
- Итак, что такое Laravel?
- Установка Laravel
- Обзор основных компонентов Laravel
- Маршрутизация
- Контроллеры
- Движок шаблонов Blade
- Работа с формами
- Работа с базами данных
- Подключение к базе данных
- миграции
- модели
- Сеялки и фабрики
- Заключение
Так что же такое Laravel?
Когда я начинал изучать Laravel, я думал, что это backend-фреймворк, но на самом деле Laravel – это fullstack (может быть интегрирован с Front-end фреймворками), battery-included или “out of the box” PHP-фреймворк.
“Из коробки” означает встроенные функции, которые практически не требуют настройки для работы. Если взять, к примеру, аутентификацию, то в других фреймворках вам, возможно, придется создавать всю систему с нуля, а Laravel уже прикрыл вас. Это огромный плюс к опыту разработки.
Вот почему при установке Laravel вы обнаружите структуру папок (подобно Ruby on Rails), а не пустую папку.
Установка Laravel
Необходимые условия
- PHP 8.0
- Принципы ООП PHP
- Базовые знания о модели MVC
- composer (опционально)
Установка Laravel
Существует множество вариантов установки Laravel
Самый простой – использовать composer, поэтому убедитесь, что он установлен в вашей системе.
composer create-project laravel/laravel project-name
После завершения установки вы можете открыть его следующим образом
что такое artisan?
artisan – это инструмент командной строки, включенный в Laravel. Он предоставляет ряд команд, которые могут помочь вам в процессе создания приложения.
Обзор основных компонентов Laravel
Маршрутизация
Чтобы определить маршрут для вашего сайта, откройте web.php
из папки routes
.
Вы используете класс Route
для определения маршрута со статическим методом (get, post, put, delete).
статические методы принимают URL и закрытие (функцию обратного вызова)
use IlluminateSupportFacadesRoute;
Route::get('/', function () {
return 'Hello World';
});
Вы также можете использовать параметры URL
use IlluminateSupportFacadesRoute;
Route::get('/books/{book}', function ($book) {
return 'The book is' . $book;
});
Помните, что имена параметров функций не имеют значения, но их порядок имеет значение!
use IlluminateSupportFacadesRoute;
Route::get('/books/{book}/{comments}', function ($comments, $book) {
return 'Im not the comments iam the book!' . $comments;
});
передача представления
Ваши представления могут быть либо html
, либо blade
шаблонизатором, Мы поговорим о blade
позже
use IlluminateSupportFacadesRoute;
Route::get('/', function () {
return view('greeting');
});
Если ваш маршрут возвращает только представление, вы можете использовать метод view
.
Route::view('/', 'greetings');
передача данных в представление
Иногда вы можете захотеть отобразить динамические данные. Вы можете передать данные в качестве второго аргумента метода view или использовать помощник with
.
use IlluminateHttpRequest;
Route::get('/user', function (Request $request) {
$user = ['name' => 'joe', 'email' => 'joe@email.com'];
return view('user', ['user' => $user]);
// or
return view('user')->with(['user' => $user]);
});
и использовать его в своем представлении (это шаблон блейда)
<body>
<h1>user name is: {{$user->name}}</h1>
<p>user email is: {{$user->email}}</p>
</body>
Однако размещение всей логики в файле routes не принесет ничего хорошего. Пришло время поговорить о контроллерах
Контроллеры
Контроллеры – это средства для организации логики обработки запросов.
Проще говоря, контроллер – это просто класс, который имеет определенные вами методы, которые могут быть назначены для обработки определенного запроса.
Вы найдете контроллеры внутри AppHttpControllers
.
Чтобы создать контроллер, вы используете команду artisan.
Итак, откройте терминал и введите: php artisan make:controller BookController
Теперь контроллер находится в: AppHttpControllersBookController
Теперь вы готовы определить свои методы
public function index()
{
return view('books');
}
Теперь вы готовы использовать его внутри вашего файла маршрута
вместо написания функции обратного вызова вы помещаете свой контроллер внутрь скобок
второй элемент внутри скобок – это имя метода вашего контроллера.
Не забудьте сначала импортировать его!
use AppHttpControllersBookController;
Route::get('/books', [BookController::class, 'index']);
Шаблонный движок Blade
Blade – это движок шаблонов, который входит в состав Laravel.
Все шаблоны Blade компилируются в простой PHP-код.
Файлы Blade используют расширение .blade.php
и обычно находятся в директории resources/views
.
рендеринг данных
Если вы читали выше о том, как передавать данные в представления, то видели, что Blade использует двойные фигурные скобки для отображения переменных PHP.
<h1>user name is: {{$user->name}}</h1>
<p>user email is: {{$user->email}}</p>
Директивы Blade
Blade поставляется с удобным и простым синтаксисом, называемым директивами Blade, для работы с управляющими структурами PHP, такими как условия и циклы
- условия
@if(1 + 1 == 2) {
<h1>yes, 1 + 1 equals 2!</h1>
} else {
<h1>no, 1 + 1 equals 10!</h1>
}
- циклы
@for ($i = 0; $i < 10; $i++)
The current value is {{ $i }}
@endfor
@while (true)
<p>I'm looping forever.</p>
@endwhile
Циклическое прохождение по массиву
@foreach ($users as $user)
<p>This is user {{ $user->id }}</p>
@endforeach
@forelse ($users as $user)
<li>{{ $user->name }}</li>
@empty
<p>No users</p>
@endforelse
Существует множество других полезных директив, таких как отображение данных, если пользователь аутентифицирован или нет, включение или повторное использование других файлов шаблона… Я предлагаю вам ознакомиться с ними
Работа с формами
Защита от CSRF
Если вы когда-нибудь работали с формами на PHP, то, возможно, слышали поговорку “Никогда не доверяйте вводу пользователя”. Laravel предоставляет простой способ предотвратить CSRF-запросы
Используйте директиву @csrf в каждой форме, и все готово!
<form action="" method="POST">
@csrf
<input name="name" type="text" />
<input name="email" type="email" />
<input name="password" type="password" />
<input type="submit" />
</form>
Обработка запросов формы
Действия вашей формы должны указывать на маршрут, определенный в web.php
(см. раздел Маршрутизация), который предпочтительно передает запрос контроллеру (см. раздел Контроллеры).
В Laravel есть класс Request для взаимодействия с HTTP-запросом
- получение входных данных
class UserController extends Controller
{
public function store(Request $request)
{
// all inputs values as an array
$inputs = $request->all();
// specific input value
$name = $request->input('name');
}
}
Работа с базами данных
Подключение к базе данных
Подключиться к базе данных очень просто! Перейдите в файл .env
в корневой директории и заполните поля
По умолчанию laravel использует mysql
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_database
DB_USERNAME=root
DB_PASSWORD=
И готово!
все взаимодействие с базой данных будет происходить через “миграции” и “модели”
миграции
Проще говоря, миграции – это просто способ создать таблицу и определить схему (столбцы) вашей таблицы, плюс система контроля версий для этих столбцов.
Чтобы создать тип миграции в CLI
Внутри функции up
определите свойства (столбцы):
Вот все доступные типы столбцов
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->longText('body');
$table->timestamps();
});
}
модели
Для каждой таблицы существует соответствующая модель. Эта модель является посредником вашей таблицы. Модели используются для извлечения, вставки и удаления строк таблицы.
создание типа модели в CLI
Помните, что Laravel интуитивно понимает имена, поэтому модель Post
означает, что существует таблица posts
.
Если вы сомневаетесь, что Laravel правильно поймет название таблицы (например, как множественное число осьминога?! 😂). Вы можете явно определить имя с помощью свойства protected table.
namespace AppModels;
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
protected $table = 'my_posts';
}
Обычно вы ничего не добавляете в файл модели, если только вам не нужно изменить какую-то конфигурацию или добавить связь с другими моделями.
Вы просто используете ее сразу!
use AppModelsPost
$posts = Post::all(); // get all records
$post = Post::where('title', 'Hello World')->first();
Сеялки и фабрики
На этапе разработки вы можете захотеть иметь образец данных в таблице для работы. Однако вставлять данные вручную было бы обременительно, поэтому на помощь приходят фабрики и сеялки.
seeders – это просто функции, которые заполняют данные при выполнении. Есть файл по умолчанию, который поставляется с установкой, DBSeeder.php
в каталоге database/seeders
: Обычно вам понадобится только этот.
class DatabaseSeeder extends Seeder {
public function run()
{
Post::factory()
->count(20)
->create();
}
}
Фабрики – это способ создания поддельных записей данных, Laravel использует для этого пакет faker
.
Чтобы создать тип фабрики в CLI
class PostFactory extends Factory
{
public function definition()
{
return [
'title' => $this->faker->sentence(),
'body' => $this->faker->text()
];
}
}
Чтобы сгенерировать тип записи данных в CLI
Теперь перейдите к вашей базе данных и вы увидите, что таблица содержит 10 строк.
Заключение
Надеюсь, эта статья помогла вам хоть немного познакомиться с Laravel. Поддержите меня, откликнувшись на этот пост. Это много значит для меня!
Если у вас есть вопросы или вы хотите на что-то обратить внимание, не стесняйтесь оставлять комментарии.