前端

未匹配的标注
本文档最新版为 12.x,旧版本可能放弃维护,推荐阅读最新版!

前端

简介

Laravel 是一个后端框架,它提供了构建现代 Web 应用程序所需的所有功能,例如 路由, 验证, 缓存, 队列, 文件存储 等等。我们更致力于为开发者打造卓越的全栈体验,提供强大的前端构建方案。

在使用 Laravel 构建应用程序时,处理前端开发主要有两种方式,选择哪种方式取决于你是想利用 PHP 构建前端,还是想使用 React、Svelte 和 Vue 等 JavaScript 框架。我们将在下面详细解析这两种方案,助你根据应用场景作出最优选。

使用 PHP

PHP 和 Blade

在过去,大多数 PHP 应用程序使用简单的 HTML 模板将 HTML 渲染到浏览器,这些模板中散布着 PHP echo 语句,用于渲染在请求期间从数据库检索的数据:

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

在 Laravel 中,仍然可以通过 视图Blade 来实现这种渲染方法。Blade 是一个极其轻量级的模板语言,它提供了方便、简洁的语法来显示数据、遍历数据等等:

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

在这种方式下构建应用程序时,表单提交和其他页面交互通常会从服务器接收一个全新的 HTML 文档,浏览器随后重新渲染整个页面。即使在今天,许多应用程序也完全可以适合以这种方式使用简单的 Blade 模板来构建其前端。

不断增长的期望

然而,随着用户对 Web 应用体验的要求不断提高,许多开发者意识到需要构建更具动态性、交互感更强的前端界面。为此,部分开发者选择使用 React、Svelte 或 Vue 等 JavaScript 框架来构建前端。

另一些开发者则倾向于继续使用自己熟悉的后端语言,并开发出能构建现代 Web 应用 UI 的解决方案,同时仍主要依托后端语言。例如,在 Rails 生态中,催生了 TurboHotwireStimulus 等库。

在 Laravel 生态中,主要通过使用 PHP 来创建现代、动态前端的需求催生了 Laravel LivewireAlpine.js

Livewire

Laravel Livewire 是一个用于构建由 Laravel 驱动的前端框架,它能打造出与 React、Svelte 和 Vue 等现代 JavaScript 框架同样动态、现代且富有生命力的前端体验。

使用 Livewire 时,你将创建 Livewire 「组件」,每个组件渲染 UI 的一个独立部分,并公开可供前端调用和交互的方法与数据。例如,一个简单的「计数器」组件可能如下所示:

<?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 结合使用会带来一系列复杂问题,例如客户端路由、数据注入(data hydration)以及身份认证。客户端路由通常可以通过使用 NextNuxt 等 React / Svelte / Vue 框架来简化;但在将 Laravel 这样的后端框架与这些前端框架结合时,数据注入和身份认证仍然是复杂且繁琐的问题。

此外,开发者还需要维护两个独立的代码仓库,往往需要协调两个仓库之间的维护、发布和部署工作。虽然这些问题并非无法解决,但我们认为这并不是一种高效或令人愉悦的应用开发方式。

Inertia

幸运的是,Laravel 提供了两全其美的解决方案。Inertia 在 Laravel 应用与现代 React、Svelte 或 Vue 前端之间架起了一座桥梁,让你能够使用 React、Svelte 或 Vue 构建功能完备的现代前端,同时仍然利用 Laravel 的路由和控制器来处理路由、数据注入和身份认证 —— 所有这些都在同一个代码仓库中完成。采用这种方式,你可以尽情享受 Laravel 和 React / Svelte / Vue 的全部强大功能,而不会削弱任何一个工具的能力。

将 Inertia 安装到 Laravel 应用后,你可以像往常一样编写路由和控制器。不过,控制器不再是返回 Blade 模板,而是返回一个 Inertia 页面:

<?php

namespace App\Http\Controllers;

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

class UserController extends Controller
{
    /**
     * 显示给定用户的个人资料。
     */
    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):

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 CloudLaravel Forge 部署应用时,确保 Inertia 的服务端渲染进程始终运行是轻而易举的。

入门套件

如果你希望使用 Inertia 和 React / Svelte / Vue 构建前端,可以利用我们的 React、Svelte 或 Vue 应用入门套件来快速启动应用开发。这些入门套件均使用 Inertia、React / Svelte / Vue、TailwindVite 搭建应用的后端和前端认证流程,让你能够立即着手打造下一个重大创意。

打包资源

无论你选择使用 Blade 和 Livewire 还是 React / Svelte / Vue 与 Inertia 来开发前端,都可能需要将应用的 CSS 打包成可用于生产环境的资源文件。当然,如果你选择使用 React、Svelte 或 Vue 构建应用前端,还需要将你的组件打包成浏览器可直接运行的 JavaScript 资源文件。

默认情况下,Laravel 使用 Vite 来打包你的资源。Vite 提供了极快的构建速度,并在本地开发期间实现近乎即时的热模块替换(HMR)。在所有新的 Laravel 应用中,包括那些使用我们入门套件的应用,你会找到一个 vite.config.js 文件,它加载了我们的轻量级 Laravel Vite 插件,让你在 Laravel 应用中使用 Vite 变得轻松愉快。

最快上手 Laravel 和 Vite 的方式是使用我们的 应用入门套件 开始应用开发。这些入门套件为你提供了前后端认证脚手架,从而快速启动你的应用。

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

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/13.x/fr...

译文地址:https://learnku.com/docs/laravel/13.x/fr...

上一篇 下一篇
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~