БЗ :: База Знаний

KB :: Knowledge Base

Пошаговая шпаргалка

Как сделать свой первый проект на Laravel

Просто повторяйте все мои ходы
И уже через несколько часов вы будете знать самый популярный в мире фреймворк!

Шаг 001

Знакомство с сайтом "Учебный Лагерь Ларавель"

Для справки.
Laravel (по-русски Ларавел или Ларавель) - это самый популярный на начало 2025 года бесплатный PHP-фреймворк с открытым исходным кодом. Ларавель специально разработан для создания универсальных сайтов и веб-приложений. Позволяет упростить аутентификацию, маршрутизацию, архитектуру приложения, сессии, кэширование и работу с базой данных.

Заходим на сайт "Учебный Лагерь Ларавель" по данному урлу:
https://bootcamp.laravel.com/

Внимание! Иногда поддомен "Учебного Лагеря" может не работать и ссылка редиректится на документацию. Такое бывает, например, при обновлении учебных курсов. Это не должно нас смущать. Просто будем пользоваться в таком случае основной документацией.

Учебный Лагерь Ларавель

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

01. Введение
Добро пожаловать на курс "Учебный Лагерь Ларавель"! В этом руководстве мы рассмотрим создание современного приложения Laravel с нуля. Чтобы изучить эту структуру, мы создадим платформу микроблогов под названием Chirper (Чирпер).

Для справки. Чирпер - это пародия на известный сайт Twitter (Твиттер). Сейчас (2025 год) Твиттер находится в процессе ребрендинга в новый бренд "Социальная сеть X". Все эти термины Чирпер, Твиттер и т.п. обозначают болтовню, "чириканье", обмен краткими сообщениями.

Шаг 002

Выбор приключения: Blade (Лезвие), Livewire или JavaScript

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

Мы с вами просто выбираем Blade (Лезвие), тем самым в три раза сужаем область изучаемых материалов.

Blade (Лезвие)
Blade - это простой, но мощный движок шаблонов, включенный в состав Laravel. Ваш HTML будет отображаться на стороне сервера, что позволит легко включать динамический контент из вашей базы данных. Мы также будем использовать Tailwind CSS, чтобы наш сайт выглядел великолепно!

Если вы не знаете, с чего начать, мы думаем, что Blade - самый простой вариант. Вы всегда можете вернуться и снова собрать Chirper, используя Livewire или JavaScript.

Заходим на раздел "Создание Чирпера (Chirper) с использованием Лезвия (Blade)" по данному урлу:
https://bootcamp.laravel.com/blade/installation

Создание Чирпера (Chirper) с использованием Лезвия (Blade)

Шаг 003

Подготовка к установке Ларавель

Если у вас уже установлен PHP и Composer на локальном компьютере, то следует проверить, соответствует ли установленная версия PHP необходимым требованиям.
https://www.php.net/supported-versions.php

Поддерживыемые версии PHP

Проверка установленной версии php производится командой: php -v
C:\Windows\SysWOW64>php -v
PHP 8.2.12 (cli) (built: Oct 24 2023 21:15:15) (ZTS Visual C++ 2019 x64)
Copyright (c) The PHP Group
Zend Engine v4.2.12, Copyright (c) Zend Technologies
Версия PHP

А что делать, если PHP не той версии или вообще не установлен?

Один из вариантов решения проблемы - Herd.

Herd - это невероятно быстрая нативная среда разработки на Laravel и PHP для Windows. Он включает в себя все необходимое для начала разработки на Laravel, включая PHP и nginx. После установки Herd вы готовы начать разработку с помощью Laravel.

Скачать Herd для установки можно здесь:
https://herd.laravel.com/windows
Скачать Herd

Шаг 004

Процесс установки Ларавель

Создаем папку для установки.

Пусть, например, это будет папка:
f:\bootcamp_laravel_com\try02\

Находясь в папке выше запускаем команду:
composer create-project laravel/laravel chirper
composer create-project laravel/laravel chirper

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

Если возникли какие-либо проблемы, то их надо решить.

Для простоты команда create-project в Composer автоматически создаст новую базу данных SQLite по адресу:
database/database.sqlite для хранения данных вашего приложения.

В нашем конкретном случае файл базы данных здесь:
f:\bootcamp_laravel_com\try02\chirper\database\database.sqlite

Обращаю внимание. Laravel умеет работать и с более сложными базами данных, например, MySQL или Maria. Но для нас, новичков, лучше всего такая простая база данных как SQLite. Вся база данных представляет собой файл database.sqlite, что делает процессы резервного копирования или перемещения максимального простыми.

Если же возникло желание и/или потребность посмотреть, что там внутри этого файла, то можно воспользоваться, например, клиентами DB Browser (SQLite) или SQLiteStudio

Шаг 005

Запуск локального сервера

После создания проекта запустите локальный сервер разработки Laravel с помощью команды Serve Laravel Artisan:
php artisan serve

Запускать эту команду следует из папки, в которую мы установили проект:
f:\bootcamp_laravel_com\try02\chirper\

f:\bootcamp_laravel_com\try02>cd f:\bootcamp_laravel_com\try02\chirper\

f:\bootcamp_laravel_com\try02\chirper>php artisan serve

   INFO  Server running on [http://127.0.0.1:8000].

  Press Ctrl+C to stop the server
Запуск локального сервера php artisan serve

Теперь если мы в любом браузере введем в адресной строке урл:
http://127.0.0.1:8000/

То отобразится пилотная версия главной страницы проекта:
Пилотная версия главной страницы проекта

Шаг 006

Реализация всех функций аутентификации Laravel

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

Laravel Breeze предлагает несколько вариантов слоя представления, включая шаблоны Blade или Vue и React с Inertia. В этом уроке мы будем использовать Blade.

Open a new terminal in your chirper project directory and install your chosen stack with the given commands:
composer require laravel/breeze --dev
php artisan breeze:install blade
После запуска команд выше должны пойти вот такие процессы: Если процессы прошли успешно, как в данном видео, то можно двигаться дальше.

Breeze установит и настроит ваши внешние зависимости, поэтому нам просто нужно запустить сервер разработки Vite, чтобы автоматически перекомпилировать наш CSS и обновить браузер, когда мы вносим изменения в наши шаблоны Blade:
npm run dev

  VITE v6.1.1  ready in 256 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose
  ➜  press h + enter to show help

  LARAVEL v11.43.2  plugin v1.2.0

  ➜  APP_URL: http://localhost

VITE v6.1.1

VITE в браузере http://localhost:5173/

Если вы обновите новое приложение Laravel в браузере, вы увидите ссылку "Register" ("Зарегистрироваться") в правом верхнем углу. Кликните, чтобы увидеть регистрационную форму, предоставленную Laravel Breeze.
http://127.0.0.1:8000/
Ссылка "Register" ("Зарегистрироваться") в правом верхнем углу.

http://127.0.0.1:8000/register
Регистрационная форма, предоставленная Laravel Breeze.

Теперь попробуем зарегистрировать и залогиниться в этом нашем новом проекте.

Я предлагаю использовать следующие данные, чтобы не запутаться и не забыть:

Name admin
Email admin@test.ru
Password 12345678
Confirm Password 12345678

В любом случае, обратите внимание, длина пароля должна быть не менее 8 символов.

Регистрационная форма, предоставленная Laravel Breeze. Вводим значения. Name: admin Email: admin@test.ru Password: 12345678 Confirm Password: 12345678

После этого должно появиться сообщение:
You're logged in! Вы вошли в систему!

You're logged in! Вы вошли в систему!

Т.е. сразу после регистрации новый пользователь автоматически входит в систему.

Теперь, если мы, используя какой-нибудь клиент для SQLite, посмотрим содержание файла:
f:\bootcamp_laravel_com\try02\chirper\database\database.sqlite

То увидим, что в таблице users есть одна запись.

Запись в таблице users

При этом в БД хранится не сам пароль 12345678, а хэш от пароля длинной 60 символов: $2y$12$Omf.y8OuFY2Gp5DG40aMT.iVqobGWe5f1PU2KFZeEdzfN2QtdaQyy

Шаг 007

03. Создание чик-чириков (Chirps)

Теперь вы готовы приступить к созданию нового приложения! Давайте разрешим нашим пользователям публиковать короткие сообщения под названием Чик-чирики (Chirps).

Оригинальная инструкция здесь:
https://bootcamp.laravel.com/blade/creating-chirps

Модели (models), миграции (migrations) и контроллеры (controllers).

Чтобы пользователи могли публиковать Чик-чирики (Chirps), нам нужно будет создать модели, миграции и контроллеры. Давайте рассмотрим каждую из этих концепций немного глубже:
  • Модели предоставляют мощный и удобный интерфейс для взаимодействия с таблицами в вашей базе данных.
  • Миграции позволяют легко создавать и изменять таблицы в базе данных. Они гарантируют, что одна и та же структура базы данных существует везде, где работает ваше приложение.
  • Контроллеры отвечают за обработку запросов, отправленных к вашему приложению, и возврат ответа.

Почти каждая создаваемая вами функция будет включать в себя все эти части, работающие вместе в гармонии, поэтому команда artisan make:model может создать их все для вас одновременно.

Давайте создадим модель, миграцию и контроллер ресурсов для наших Chirps с помощью следующей команды:
php artisan make:model -mrc Chirp

php artisan make:model -mrc Chirp

Эта команда создала для нас три файла:
  • f:\bootcamp_laravel_com\try02\chirper\app\Models\Chirp.php - Основная Модель.
  • f:\bootcamp_laravel_com\try02\chirper\database\migrations\2025_02_23_113829_create_chirps_table.php - Миграция базы данных, в ходе которой будет создана таблица вашей базы данных.
  • f:\bootcamp_laravel_com\try02\chirper\app\Http\Controllers\ChirpController.php - HTTP-контроллер, который будет принимать входящие запросы и возвращать ответы.

Примечание.
Вы можете просмотреть все доступные параметры команды artisan make:model, выполнив команду вот с такими опциями:
php artisan make:model --help

php artisan make:model --help

Шаг 008

Маршрутизация - Routing

Нам также нужно будет создать URL-адреса для нашего контроллера. Мы можем сделать это, добавив "маршруты", которые управляются в каталоге маршрутов вашего проекта routes. Поскольку мы используем контроллер ресурсов, мы можем использовать один оператор Route::resource() для определения всех маршрутов, следующих обычной структуре URL.

Для начала мы собираемся включить два маршрута:
  • Маршрут index отобразит нашу форму и список Чик-чириков (Чирпов, Chirps).
  • Маршрут storeбудет использоваться для сохранения новых Чик-чириков (Чирпов, Chirps).

Мы также собираемся разместить эти маршруты за двумя промежуточными программами middleware:
  • Промежуточное программное обеспечение аутентификации auth middleware гарантирует, что только вошедшие в систему пользователи смогут получить доступ к маршруту.
  • Промежуточное программное обеспечение для верификации verified middleware будет использоваться, если вы решите включить проверку электронной почты.

Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\routes\web.php

Старая (текущая) версия:
<?php

use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});

require __DIR__.'/auth.php';

Новая версия:
<?php
 
use App\Http\Controllers\ChirpController;
use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
 
Route::get('/', function () {
    return view('welcome');
});
 
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
 
Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});
 
Route::resource('chirps', ChirpController::class)
    ->only(['index', 'store'])
    ->middleware(['auth', 'verified']);
 
require __DIR__.'/auth.php';

Новая код:
use App\Http\Controllers\ChirpController;
...
Route::resource('chirps', ChirpController::class)
    ->only(['index', 'store'])
    ->middleware(['auth', 'verified']);

Это создаст следующие маршруты:
Verb  URI    Action Route Name
GET  /chirps index  chirps.index
POST /chirps store  chirps.store

Примечание.
Вы можете просмотреть все маршруты вашего приложения, выполнив команду:
php artisan route:list

Маршруты приложения: php artisan route:list


Давайте проверим наш маршрут и контроллер, вернув тестовое сообщение из метода index нашего нового класса ChirpController
Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Http\Controllers\ChirpController.php

Старая (текущая) версия:
<?php

namespace App\Http\Controllers;

use App\Models\Chirp;
use Illuminate\Http\Request;

class ChirpController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(Chirp $chirp)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Chirp $chirp)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Chirp $chirp)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Chirp $chirp)
    {
        //
    }
}

Новая версия:
<?php

namespace App\Http\Controllers;

use App\Models\Chirp;
use Illuminate\Http\Request;

use Illuminate\Http\Response; // новый!

class ChirpController extends Controller
{
    /**
     * Display a listing of the resource.
     */
//    public function index()
    public function index(): Response // новый!
    {
        //
      return response('Превед, медвед! :: Hello, World!'); // новый!
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(Chirp $chirp)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Chirp $chirp)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Chirp $chirp)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Chirp $chirp)
    {
        //
    }
}


Если вы вошли в систему ранее, вы должны увидеть свое сообщение при переходе по адресу:
http://localhost:8000/chirps или http://localhost/chirps, если вы используете Sail!

http://localhost:8000/chirps

Шаг 009

Blade - Лезвие, используем представление

Еще не впечатлены? Давайте обновим метод index нашего класса ChirpController, чтобы отображать представление (view) Blade:
Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Http\Controllers\ChirpController.php
Новая версия:
<?php

namespace App\Http\Controllers;

use App\Models\Chirp;
use Illuminate\Http\Request;

use Illuminate\Http\Response;

use Illuminate\View\View; // новый!

class ChirpController extends Controller
{
    /**
     * Display a listing of the resource.
     */
//    public function index()
//    public function index(): Response // старый!
    public function index(): View // новый!
    {
      //
      // return response('Превед, медвед! :: Hello, World!'); // старый!
      return view('chirps.index'); // новый!
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(Chirp $chirp)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Chirp $chirp)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Chirp $chirp)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Chirp $chirp)
    {
        //
    }
}


Затем мы можем создать шаблон представления Blade с формой для создания новых Чик-чириков (Чирпы, Chirps):

Создаем новый файл: f:\bootcamp_laravel_com\try02\chirper\resources\views\chirps\index.blade.php
Новая версия:
<x-app-layout>
    <div class="max-w-2xl mx-auto p-4 sm:p-6 lg:p-8">
        <form method="POST" action="{{ route('chirps.store') }}">
            @csrf
            <textarea
                name="message"
                placeholder="{{ __('What\'s on your mind?') }}"
                class="block w-full border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50 rounded-md shadow-sm"
            >{{ old('message') }}</textarea>
            <x-input-error :messages="$errors->get('message')" class="mt-2" />
            <x-primary-button class="mt-4">{{ __('Chirp') }}</x-primary-button>
        </form>
    </div>
</x-app-layout>


Вот и все! Обновите страницу в браузере, чтобы увидеть новую форму, отображаемую в макете по умолчанию, предоставленном Breeze!

Форма для ввода Чик-чирика http://localhost:8000/chirps

Если ваш снимок экрана не совсем похож на приведенный выше, возможно, вам придется остановить и запустить сервер разработки Vite для Tailwind, чтобы обнаружить классы CSS в новом файле, который мы только что создали.

С этого момента любые изменения, которые мы вносим в наши шаблоны Blade, будут автоматически обновляться в браузере всякий раз, когда сервер разработки Vite запускается через npm run dev.

Шаг 010

Меню навигации - Navigation menu

Обновите компонент navigation.blade.php, предоставленный Breeze, чтобы добавить пункт меню для мониторов компьютеров, а также для экранов смартфонов.
Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\resources\views\layouts\navigation.blade.php

Файл большой, тут только изменения:
<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ml-10 sm:flex">
    <x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
        {{ __('Dashboard') }}
    </x-nav-link>
    <x-nav-link :href="route('chirps.index')" :active="request()->routeIs('chirps.index')">
        {{ __('Chirps') }}
    </x-nav-link>
</div>

<!-- Responsive Navigation Menu -->
<div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
<div class="pt-2 pb-3 space-y-1">
    <x-responsive-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
        {{ __('Dashboard') }}
    </x-responsive-nav-link>
    <x-responsive-nav-link :href="route('chirps.index')" :active="request()->routeIs('chirps.index')">
        {{ __('Chirps') }}
    </x-responsive-nav-link>
</div>



Скачать текущую версию можно здесь:
navigation.blade_st010.zip

Пояснение. Мы добавляем ссылку route('chirps.index') для мониторов компьютеров, а также для экранов смартфонов.

Если код исправлен корректно, то тогда мы увидим ссылку в навигационном меню.

Ссылка в навигационном меню на http://localhost:8000/chirps

Ссылка в навигационном меню на http://localhost:8000/chirps для мобильных устройств.
Ссылка в навигационном меню на http://localhost:8000/chirps для мобильных устройств

Переход в раздел: http://localhost:8000/chirps
Переход в раздел: http://localhost:8000/chirps

Создаем первую запись в chirps
Первый тестовый чик-чирик!
First test chirp!

Создаем первую запись в chirps

Но не надо спешить нажимать кнопку "CHIRP"!

Необходимо предварительно провести некоторые подготовительные мероприятия!

Шаг 011

Настройки для записи чик-чириков в БД

Создание отношений
Возможно, вы заметили на предыдущем шаге, что мы вызвали метод chirps для объекта $request->user(). Нам нужно создать этот метод в нашей модели пользователя, чтобы определить отношение "имеет много" ("has many").

Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Models\User.php
Файл большой, тут только изменения:
...
    public function chirps(): HasMany
    {
        return $this->hasMany(Chirp::class);
    }
...

Скачать текущую версию можно здесь:
User_st011.zip

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

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

Laravel защищает вас от случайных действий, блокируя массовое назначение по умолчанию. Однако массовое назначение очень удобно, поскольку избавляет от необходимости назначать каждый атрибут один за другим. Мы можем включить массовое назначение безопасных атрибутов, пометив их как "заполняемые" ("fillable").

Давайте добавим свойство $fillable в нашу модель Chirp, чтобы включить массовое присвоение атрибута сообщения.

Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Models\User.php
Содержание файла:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Chirp extends Model
{
    //
    protected $fillable = [
        'message',
    ];

//
} // class Chirp extends Model
//

Скачать текущую версию можно здесь:
Chirp_st011.zip

Обновление миграции
Во время создания приложения Laravel уже применил миграции по умолчанию, включенные в каталог базы данных/миграции. Вы можете проверить текущую структуру базы данных, используя команды php artisan db:show и php artisan db:table
php artisan db:show
php artisan db:table users

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

В общем случае:
f:\bootcamp_laravel_com\try02\chirper\database\migrations\<timestamp>_create_chirps_table.php

В нашем примере:
f:\bootcamp_laravel_com\try02\chirper\database\migrations\2025_02_23_113830_create_chirps_table.php
Содержание файла:
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('chirps', function (Blueprint $table) {
            $table->id();
//
// AV 20250301
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
            $table->string('message');
//

            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('chirps');
    }
};


Скачать текущую версию можно здесь:
2025_02_23_113830_create_chirps_table_st011.zip

Запуск миграции:
f:\bootcamp_laravel_com\try02\chirper>php artisan migrate

   INFO  Running migrations.

  2025_02_23_113830_create_chirps_table .................................................................. 9.09ms DONE


f:\bootcamp_laravel_com\try02\chirper>


Если запуск миграции прошел успешно, то теперь можно делать записи в нашу БД.

Попробуйте отправить первую запись (см выше шаг 010).

Если мы посмотрим в нашу БД, то теперь мы смжем увидеть нашу первую запись.
Наша первая запись в БД


Шаг 012

04. Показ чик-чириков

На предыдущем шаге мы добавили возможность создавать Чик-чирики (Chirps), теперь мы готовы их отображать!

Получение щебетаний
Давайте обновим метод index нашего класса ChirpController, чтобы передавать Chirps от каждого пользователя на нашу индексную страницу (index).
Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Http\Controllers\ChirpController.php
Файл большой, тут только изменения:
<?php
...
    public function index(): View // новый!
    {
      //
      // return response('Превед, медвед! :: Hello, World!'); // старый!
      //return view('chirps.index'); // новый!
      return view('chirps.index', [
        'chirps' => Chirp::with('user')->latest()->get(),
      ]);
    }
...

Скачать текущую версию можно здесь:
ChirpController_st012.zip

Подключение пользователей к Chirps
Мы проинструктировали Laravel вернуть отношения с пользователем, чтобы мы могли отобразить имя автора Chirp. Но отношения с пользователем Chirp еще не определены. Чтобы исправить это, давайте добавим новое отношение "принадлежит к" нашей модели Chirp:
Работаем с файлом: f:\bootcamp_laravel_com\try02\chirper\app\Models\Chirp.php
Содержание файла:
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\Relations\BelongsTo;

class Chirp extends Model
{
    //
    protected $fillable = [
        'message',
    ];

    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }


//
} // class Chirp extends Model
//

Скачать текущую версию можно здесь:
Chirp_st012.zip

Обновление нашего представления
Далее давайте обновим наш компонент index.blade.php, чтобы отображать Chirps под нашей формой:

Скачать текущую версию можно здесь:
index.blade_st012.zip

Теперь наши Чик-чирики (Chirps) отображаются под формой ввода.
Теперь наши Чик-чирики (Chirps) отображаются под формой ввода.

Итак, совместными усилиями мы сделали пилотную версию нашего проекта на Ларавель.

Теперь, по желанию, каждый самостоятельно можем выполнить следующие мероприятия по улучшению проекта.
  • Изучить документацию по Laravel
  • Добавить функционалы корректировки, удалению пользователей
  • Добавить функционалы корректировки, удалению сообщений (чик-чириков)
  • Разукрасить фон сообщений для улучшения визуального восприятия
  • Придумать что-то свое и реализовать

    • Желаю успеха!