Подписывайтесь на наш Telegram канал и будьте в курсе всех событий.
Примите наш вызов и улучшите свои навыки!
Примите наш вызов и улучшите свои навыки!

Frontend

Введение

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

Существует два основных способа разработки фронтенда при создании приложения на Laravel, и выбор подхода зависит от того, хотите ли вы создать фронтенд на основе PHP или с помощью JavaScript-фреймворков, таких как Vue и React. Ниже мы рассмотрим оба этих варианта, чтобы вы могли принять взвешенное решение относительно наилучшего подхода к разработке фронтенда для вашего приложения.

Использование PHP

PHP и Blade

В прошлом большинство PHP-приложений отображали HTML в браузере, используя простые HTML-шаблоны с вкрапленными PHP операторами echo, которые выводили данные, полученные из базы данных во время запроса:

<div>
    <?php foreach ($users as $user): ?>
        Привет, <?php echo $user->name; ?> <br />
    <?php endforeach; ?>
</div>

В Laravel такой подход к отображению HTML все еще можно реализовать с использованием шаблонов (views) и Blade. Blade – это крайне легкий язык шаблонов, который предоставляет удобный и краткий синтаксис для отображения данных, итерации по данным и многого другого:

<div>
    @foreach ($users as $user)
        Привет, {{ $user->name }} <br />
    @endforeach
</div>

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

Растущие ожидания

Однако с увеличением требований пользователей к веб-приложениям многие разработчики сталкиваются с необходимостью создания более динамичных интерфейсов с более отточенным взаимодействием. В связи с этим некоторые разработчики предпочитают создавать пользовательский интерфейс своего приложения с использованием JavaScript-фреймворков, таких как Vue и React.

Другие, предпочитая оставаться верными языку бэкенда, с которым они знакомы, разработали решения, которые позволяют создавать современные пользовательские интерфейсы веб-приложений, в основном используя свой предпочитаемый язык бэкенда. Например, в экосистеме Rails это подстегнуло создание таких библиотек, как Turbo Hotwire, и Stimulus.

В экосистеме Laravel необходимость создания современных и динамичных интерфейсов с использованием преимущественно PHP привела к появлению Laravel Livewire и Alpine.js.

Livewire

Laravel Livewire это платформа для создания фронтенда на базе Laravel, который выглядит динамичными, современными и живыми, как фронтенд, созданные с использованием современных фреймворков JavaScript, таких как Vue и React.

При использовании Livewire вы создаете “компоненты” Livewire, которые отображают отдельные части вашего пользовательского интерфейса и предоставляют методы и данные, которые можно вызывать и с которыми можно взаимодействовать из фронтенда вашего приложения. Например, простой компонент “Counter” может выглядеть следующим образом:

<?php

namespace App\Http\Livewire;

use Livewire\Component;

class Counter extends Component
{
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }

    public function render()
    {
        return view('livewire.counter');
    }
}

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

<div>
    <button wire:click="increment">+</button>
    <h1>{{ $count }}</h1>
</div>

Как видите, Livewire позволяет вам добавлять новые атрибуты HTML, такие как wire:click, которые соединяют фронтенд и бэкенд вашего приложения Laravel. Кроме того, вы можете отображать текущее состояние компонента с использованием простых выражений Blade.

Для многих Livewire стал революцией в разработке фронтенда с использованием Laravel, позволяя оставаться в зоне комфорта Laravel при создании современных динамичных веб-приложений. Обычно разработчики, использующие Livewire, также используют Alpine.js для добавления JavaScript только там, где это необходимо, например, для отображения окна диалога.

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

Стартовые наборы

Если вы хотите создать свой интерфейс с использованием PHP и Livewire, вы можете использовать наши стартовые наборы Breeze или Jetstream, чтобы ускорить разработку вашего приложения. Оба этих стартовых комплекта представляют собой основу бэкэнд- и фронтэнд-потока аутентификации вашего приложения с помощью Blade и Tailwind, так что вы можете просто приступить к реализации своей следующей большой идеи.

Использование Vue / React

Хотя можно создавать современный фронтенд с использованием Laravel и Livewire, многие разработчики предпочитают использовать возможности JavaScript-фреймворка, такого как Vue или React. Это позволяет разработчикам воспользоваться богатой экосистемой пакетов и инструментов JavaScript, доступных через NPM.

Однако, без дополнительных инструментов, совмещение Laravel с Vue или React потребовало бы решения различных сложных проблем, таких как маршрутизация на стороне клиента, гидратация данных и аутентификация. Маршрутизация на стороне клиента часто упрощается с использованием специализированных фреймворков Vue / React, таких как Nuxt и Next; однако гидратация данных и аутентификация остаются сложными и неудобными задачами при сочетании бэкенд-фреймворка, такого как Laravel, с этими фронтенд-фреймворками.

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

Inertia

К счастью, Laravel предлагает лучшее из обоих миров. Inertia устраняет разрыв между вашим приложением Laravel и современным фронтендом на Vue или React. Это позволяет создавать полноценные, современные интерфейсы, используя Vue или React, при этом воспользовавшись маршрутами и контроллерами Laravel для решения задач по маршрутизации, гидратации данных и аутентификации — всё это в рамках единого репозитория кода. Таким образом, вы можете наслаждаться всей мощью Laravel и Vue/React, не сталкиваясь с ограничениями ни одного из этих инструментов.

После установки Inertia в вашем приложении Laravel, вы будете создавать маршруты и контроллеры так же, как обычно. Однако, вместо возвращения шаблона Blade из вашего контроллера, вы вернете страницу Inertia:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;
use Inertia\Inertia;
use Inertia\Response;

class UserController extends Controller
{
    /**
     * Показать профиль для указанного пользователя
     */
    public function show(string $id): Response
    {
        return Inertia::render('Users/Profile', [
            'user' => User::findOrFail($id)
        ]);
    }
}

Страница Inertia соответствует компоненту Vue или React, обычно сохраненному в каталоге resources/js/Pages вашего приложения. Данные, переданные странице с помощью метода Inertia::render, будут использоваться для гидратации “props” компонента страницы:

<script setup>
import Layout from '@/Layouts/Authenticated.vue';
import { Head } from '@inertiajs/vue3';

const props = defineProps(['user']);
</script>

<template>
    <Head title="User Profile" />

    <Layout>
        <template #header>
            <h2 class="font-semibold text-xl text-gray-800 leading-tight">
                Profile
            </h2>
        </template>

        <div class="py-12">
            Hello, {{ user.name }}
        </div>
    </Layout>
</template>

Как видите, Inertia позволяет использовать полную мощь Vue или React при создании фронтенда, обеспечивая легкий мост между вашим бэкендом, построенным на Laravel, и вашим фронтендом, работающим на JavaScript.

Рендеринг на стороне сервера

Если вы беспокоитесь о том, чтобы приступать к использованию Inertia из-за необходимости рендеринга на стороне сервера в вашем приложении, не волнуйтесь. Inertia предоставляет поддержку рендеринга на стороне сервера. И при развертывании вашего приложения через Laravel Forge, легко обеспечить постоянную работу процесса серверного рендеринга Inertia.

Стартовые наборы

Если вы хотите создать свой фронтенд, используя Inertia и Vue/React, вы можете воспользоваться нашими стартовыми наборами Breeze или Jetstream чтобы ускорить разработку вашего приложения. Оба этих стартовых комплекта генерируют структуру вашего бэкенда и фронтенда для аутентификации с использованием Vue / React, Tailwind, и Vite, чтобы вы могли просто приступить к реализации своей следующей большой идеи.

Сборка ресурсов (Bundling Assets)

Независимо от того, выберете ли вы разработку фронтенда с использованием Blade и Livewire или Vue/React и Inertia, вероятно, вам потребуется собрать CSS вашего приложения в готовые к продакшену ресурсы. Конечно же, если вы выберете построение фронтенда вашего приложения с использованием Vue или React, вам также потребуется собрать компоненты в готовые к использованию в браузере JavaScript-ресурсы.

По умолчанию Laravel использует Vite для сборки ваших ресурсов. Vite обеспечивает моментальную сборку и практически мгновенную замену модулей (HMR) во время локальной разработки. Во всех новых приложениях Laravel, включая те, которые используют наши стартовые наборы, вы найдете файл vite.config.js, который загружает наш легкий плагин Laravel Vite, делая использование Vite приятным взаимодействием с приложениями Laravel.

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

Более подробную документацию по использованию Vite с Laravel можно найти в нашей специализированной документации по сборке и компиляции ваших ресурсов..