Цель этого руководства — шаг за шагом научить создавать простое приложение для блога Laravel 9. Основное внимание здесь уделяется архитектуре и серверной части, хотя некоторые функции внешнего интерфейса также будут добавлены в будущем руководстве.
Для этого урока я использую следующие версии (извлеченные из composer.json
):
"require": { "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7" }, "require-dev": { "fakerphp/faker": "^1.9.1", "laravel/breeze": "^1.13", "laravel/pint": "^1.0", "laravel/sail": "^1.0.1", "mockery/mockery": "^1.4.4", "nunomaduro/collision": "^6.1", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ignition": "^1.0" },
Как и в любой среде MVC, первым шагом является определение того, какие сущности потребуются системе и как они связаны друг с другом. Это моя идея для этой системы:
С учетом этой модели становится ясно, что нам понадобятся 4 объекта: User
, Post
, Comment
и Tag
. Каждая из этих сущностей станет Моделью в нашем приложении и, следовательно, таблицей в реляционной СУБД; но нам понадобится еще одна таблица для хранения отношения m:n
между постом и тегом.
Прежде чем мы начнем программировать, вы должны убедиться, что на вашем компьютере установлен PHP 8.1 или выше; также у вас должны быть установлены/включены некоторые расширения PHP — я рекомендую mysql, intl, mbstring, curl и xml, хотя я не уверен, что все они понадобятся для этого приложения Laravel. Вам также необходимо установить NodeJS (версия 14 или выше), NPM, Composer (один из наиболее распространенных менеджеров зависимостей PHP) и Сервер MySQL. Если у вас его нет, пожалуйста, проверьте в Интернете, как их установить 😉
Создать проект
Сначала откройте терминал, перейдите в каталог рабочей области (cd …
) и введите следующие команды:
composer create-project laravel/laravel simple-blog --prefer-dist
Установить стартовый комплект
После загрузки всех зависимостей вы должны открыть предпочитаемый редактор в новом каталоге simple-blog
— я рекомендую Visual Code с Intelephense расширение.
Теперь давайте перейдем в каталог и установим Laravel Starter Kit Breeze:
cd simple-blog composer require laravel/breeze --dev php artisan breeze:install
Настройка базы данных
Далее нам нужно подготовить нашу базу данных для хранения данных приложения. На этом этапе вам необходимо получить доступ к серверу СУБД (который должен быть запущен), создать новую базу данных и, при необходимости, нового пользователя. Вы можете сделать это через phpMyAdmin, Mysql Workbench или любой другой удобный вам интерфейс. Здесь я покажу, как это сделать прямо из терминала:
mysql -u root -p mysql> create database simple_blog; mysql> create user 'laravel_user' identified by 'laravel_pw'; mysql> grant all privileges on simple_blog.* to 'laravel_user';
Теперь нажмите ctrl+d
(или command+c
на Mac), чтобы выйти из MySQL CLI, и давайте перейдем к настройке этой новой созданной базы данных и пользователя в нашем файле среды. Для этого откройте файл .env
и найдите строку, начинающуюся с DB_DATABASE
; это будет содержать имя базы данных (simple_blog
); аналогично, DB_USERNAME
и DB_PASSWORD
сохранят имя пользователя и пароль, которые приложение будет использовать для доступа к СУБД:
Чтобы проверить, все ли в порядке, введите php artisan db
; если он обращается к MySQL CLI, вам следует следовать. Если вы столкнулись с какой-либо ошибкой, проверьте, запущен ли сервер СУБД, и вы включили / установили расширение PHP mysql (это наиболее распространенные ошибки на этом этапе).
Миграция таблиц и тестирование
Теперь давайте создадим таблицы базы данных и запустим сервер приложений, чтобы протестировать его:
php artisan migrate php artisan serve
Откройте браузер на localhost:8000
, и вы должны увидеть страницу приветствия для приложения:
Ссылки Register
и Log in
должны были быть полностью рабочими, так что вы можете проверить это.
Создание других сущностей и миграций
Если вы откроете каталог database/migrations
и/или app/Models
, вы увидите, что Laravel вышел с моделью пользователя и миграцией. Теперь мы должны создать другие модели с миграциями:
php artisan make:model Post -mfsr php artisan make:model Comment -mfsr php artisan make:model Tag -mfsr php artisan make:migration create_post_tag_table
Обратите внимание, что здесь я использую параметры -mfsr
для создания модели вместе с ее миграцией (для создания таблицы базы данных), фабрики и сеялки (для создания поддельных данных для тестов) и контроллера ресурсов. Все это будет рассмотрено позже в этом уроке.
Теперь давайте добавим несколько столбцов в наши модели:
Миграция новых таблиц
Заполнив столбцы, выполните следующую команду, чтобы запустить миграцию:
php artisan migrate
Помните, что после запуска миграции или отправки новой миграции в рабочем процессе непрерывной интеграции вам больше не следует изменять эту миграцию. Если вам нужно что-то изменить в моделировании базы данных, создайте для этого другую миграцию.
Заполнение классов моделей
Теперь мы можем добавить столбцы в атрибут $fillable
связанных классов модели (внутри каталога app/Models
):
Добавление отношений
Теперь пришло время добавить некоторые отношения. Поскольку мы используем Eloquent ORM в Laravel, отношения обычно не экспортируются в базу данных, поэтому это нужно делать на уровне приложения. Laravel и Eloquent предоставляют нам мощный инструмент для создания отношений внутри моделей:
Тестирование моделей и отношений
Laravel предоставляет нам отличную команду CLI, основанную на проекте Psy Shell, доступную через команду php artisan tinker
. Оболочка находится в каталоге нашего проекта и имеет несколько ярлыков для наших классов моделей:
Используя это, вы можете играть со всеми классами и отношениями, создавая новые записи и получая к ним доступ.
Внедрение фабрик
Теперь давайте улучшим наши данные тестирования, создав фабрики и сеялки для нашей системы, чтобы мы могли начать новую новую базу данных с поддельными сгенерированными данными. Это очень поможет нам при разработке нашего интерфейса.
Во-первых, мы реализуем наши фабрики, которые будут использоваться для генерации экземпляров модели со случайными поддельными сгенерированными данными. Laravel приносит нам уже заполненный класс UserFactory
(database/factories
); если вы хотите, вы можете изменить хешированный пароль на что-то более доступное:
Точно так же мы создадим теперь другие фабрики классов:
Проверка сидов, моделей и отношений
При этом вы можете попробовать следующие команды в оболочке tinker
:
User::factory()->make() // creates an instance User::factory()->make()->save() // creates an instance and store it User::factory()->create() // same above, but shorter User::factory(5)->create() // creates and saves 5 users Post::factory(5)->create Comment::factory(5)->create Tag::factory(5)->create Post::find(1)->tags()->attach(Tag::all()->random()) Post::find(2)->tags()->attach(Tag::all()->random(3)) Post::find(2)->tags Tag::find(1)->posts // ...
Сеялки
Теперь, когда мы можем случайным образом генерировать записи для нашей базы данных, мы можем создать сеялки для базы данных автоматического заполнения с поддельными данными, поэтому мы можем запустить наше приложение с некоторыми данными, чтобы протестировать его.
Для этого мы реализуем классы Seeders внутри каталога database/seeders
:
Мы также создадим PostTagSeeder
, чтобы установить случайные связи между сообщениями и тегами. Хотя можно создать прямо в каталоге, лучше всего создавать через ремесленника:
php artisan make:seeder PostTagSeeder
Вы должны иметь в виду, что по умолчанию при запуске команды artisan вызывается только класс DatabaseSeeder
, поэтому нам нужно заставить его вызывать другие сидеры:
После этого вы можете запустить следующую команду на своем терминале:
php artisan migrate:fresh --seed
Это воссоздаст вашу базу данных и заполнит ее в соответствии с классом DatabaseSeeder
(вы можете проверить это с помощью tinker
).
Заключение
На этом мы завершаем это руководство, полностью посвященное серверной части приложения Laravel. Следующим шагом является создание внешнего интерфейса с использованием шаблонов Blade, Vue, React или другой поддерживаемой внешней среды, но это для другого руководства.