Skip to content
全部文档

前端 ​

简介 ​

Laravel 是后端框架,提供构建现代 Web 应用所需的全部能力,例如路由、验证、缓存、队列、文件存储等。不过我们认为,为开发者提供出色的全栈体验同样重要,包括构建应用前端的强大方案。

使用 Laravel 构建应用时,前端开发主要有两种方式,取决于你希望用 PHP 构建前端,还是使用 React、Svelte、Vue 等 JavaScript 框架。下文将分别讨论这两种选项,帮助你为应用选择最合适的前端方案。

使用 PHP ​

PHP 与 Blade ​

过去,大多数 PHP 应用使用夹杂 PHP echo 语句的简单 HTML 模板向浏览器渲染 HTML,以展示请求期间从数据库取出的数据:

blade
<div>
    <?php foreach ($users as $user): ?>
        Hello, <?php echo $user->name; ?> <br />
    <?php endforeach; ?>
</div>

在 Laravel 中,仍可通过视图与 Blade 采用这种方式渲染 HTML。Blade 是极其轻量的模板语言,为展示数据、遍历数据等提供便捷、简短的语法:

blade
<div>
    @foreach ($users as $user)
        Hello, {{ $user->name }} <br />
    @endforeach
</div>

以这种方式构建应用时,表单提交及其他页面交互通常会从服务器接收全新的 HTML 文档,并由浏览器重新渲染整个页面。即便在今天,许多应用仍非常适合用简单的 Blade 模板构建前端。

不断升高的期望 ​

然而,随着用户对 Web 应用期望的提升,许多开发者需要构建更动态、交互更精致的前端。因此,部分开发者会选择用 React、Svelte、Vue 等 JavaScript 框架构建前端。

另一些人更希望继续使用熟悉的后端语言,于是开发了在主要使用后端语言的同时仍能构建现代 Web UI 的方案。例如,在 Rails 生态中,催生了 Turbo、Hotwire 与 Stimulus 等库。

在 Laravel 生态中,主要用 PHP 创建现代、动态前端的需求催生了 Laravel Livewire 与 Alpine.js。

Livewire ​

Laravel Livewire 是一个框架,用于构建由 Laravel 驱动、却像 React、Svelte、Vue 等现代 JavaScript 框架一样动态、现代、鲜活的前端。

使用 Livewire 时,你会创建 Livewire「组件」,它们渲染 UI 的某一部分,并暴露可从前端调用与交互的方法和数据。例如,一个简单的「Counter」组件可能如下:

php
<?php

use Livewire\Component;

new class extends Component
{
    public $count = 0;

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

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

可以看到,Livewire 让你能编写如 wire:click 这类新 HTML 属性,连接 Laravel 应用的前后端。此外,你还可用简单的 Blade 表达式渲染组件的当前状态。

对许多人来说,Livewire 彻底改变了用 Laravel 做前端开发的方式,让他们能留在熟悉的 Laravel 中构建现代、动态的 Web 应用。使用 Livewire 的开发者通常还会用 Alpine.js 在需要的地方「点缀」JavaScript,例如渲染对话框。

若你刚接触 Laravel,建议先熟悉视图与 Blade 的基本用法,再查阅官方 Laravel Livewire 文档,了解如何用交互式 Livewire 组件将应用提升到新水平。

起步套件 ​

若希望用 PHP 与 Livewire 构建前端,可借助我们的 Livewire 起步套件 快速启动应用开发。

使用 React、Svelte 或 Vue ​

尽管可以用 Laravel 与 Livewire 构建现代前端,许多开发者仍更倾向发挥 React、Svelte 或 Vue 等 JavaScript 框架的力量,从而利用 NPM 上丰富的 JavaScript 包与工具生态。

然而,若没有额外工具,将 Laravel 与 React、Svelte 或 Vue 搭配使用时,仍需解决客户端路由、数据注水与认证等一系列复杂问题。客户端路由常可通过 Next、Nuxt 等约定性强的 React / Svelte / Vue 框架简化;但将 Laravel 这类后端框架与这些前端框架搭配时,数据注水与认证仍然复杂繁琐。

此外,开发者还需要维护两个独立代码仓库,并常需协调两边的维护、发布与部署。这些问题并非无法解决,但我们并不认为这是高效或愉悦的开发方式。

Inertia ​

幸运的是,Laravel 能兼得两者之长。Inertia 弥合了 Laravel 应用与现代 React、Svelte 或 Vue 前端之间的鸿沟,让你能用这些前端框架构建完整的现代前端,同时利用 Laravel 路由与控制器处理路由、数据注水与认证——且都在同一代码仓库中。这样你既能发挥 Laravel 与 React / Svelte / Vue 的全部能力,又不会削弱任何一方。

在 Laravel 应用中安装 Inertia 后,你仍像往常一样编写路由与控制器。不过,控制器不再返回 Blade 模板,而是返回 Inertia 页面:

php
<?php

namespace App\Http\Controllers;

use App\Models\User;
use Inertia\Inertia;
use Inertia\Response;

class UserController extends Controller
{
    /**
     * Show the profile for a given user.
     */
    public function show(string $id): Response
    {
        return Inertia::render('users/show', [
            'user' => User::findOrFail($id)
        ]);
    }
}

Inertia 页面对应一个 React、Svelte 或 Vue 组件,通常存放在应用的 resources/js/pages 目录。通过 Inertia::render 传给页面的数据会用于注水页面组件的「props」:

jsx
import Layout from '@/layouts/authenticated';
import { Head } from '@inertiajs/react';

export default function Show({ user }) {
    return (
        <Layout>
            <Head title="Welcome" />
            <h1>Welcome</h1>
            <p>Hello {user.name}, welcome to Inertia.</p>
        </Layout>
    )
}

可以看到,Inertia 让你在构建前端时充分发挥 React、Svelte 或 Vue 的能力,同时在 Laravel 驱动的后端与 JavaScript 驱动的前端之间提供轻量桥梁。

服务端渲染 ​

若因应用需要服务端渲染而对 Inertia 有顾虑,不必担心。Inertia 提供服务端渲染支持。通过 Laravel Cloud 或 Laravel Forge 部署时,确保 Inertia 的服务端渲染进程始终运行也非常轻松。

起步套件 ​

若希望用 Inertia 与 React / Svelte / Vue 构建前端,可借助我们的 React、Svelte 或 Vue 应用起步套件 快速启动开发。这些起步套件都会使用 Inertia、React / Svelte / Vue、Tailwind 与 Vite 搭建前后端认证流程,让你能立刻开始实现下一个大想法。

打包资源 ​

无论你选择用 Blade 与 Livewire,还是 React / Svelte / Vue 与 Inertia 开发前端,通常都需要将应用的 CSS 打包为生产可用资源。当然,若用 React、Svelte 或 Vue 构建前端,还需要将组件打包为浏览器可用的 JavaScript 资源。

默认情况下,Laravel 使用 Vite 打包资源。Vite 提供极快的构建速度,以及本地开发时近乎即时的热模块替换(HMR)。所有新的 Laravel 应用(包括使用我们起步套件的应用)都会包含 vite.config.js,其中加载了轻量的 Laravel Vite 插件,让 Vite 与 Laravel 搭配使用更愉快。

最快上手 Laravel 与 Vite 的方式是使用我们的应用起步套件开始开发,它们会提供前后端认证脚手架,帮助你快速起步。

INFO

关于在 Laravel 中使用 Vite 的更详细文档,请参阅我们关于打包与编译资源的专门文档。