跳到内容

前端

简介

Laravel 是一个后端框架,它提供了构建现代 Web 应用程序所需的所有功能,例如 路由验证缓存队列文件存储等等。然而,我们认为为开发人员提供美好的全栈体验非常重要,包括为构建应用程序的前端提供强大的方法。

在使用 Laravel 构建应用程序时,有两种主要方法来处理前端开发,你选择哪种方法取决于你是否希望通过利用 PHP 或使用 JavaScript 框架(如 Vue 和 React)来构建前端。我们将在下面讨论这两种选项,以便你可以就应用程序前端开发的最佳方法做出明智的决定。

使用 PHP

PHP 和 Blade

过去,大多数 PHP 应用程序使用简单的 HTML 模板(其中穿插着 PHP echo 语句,这些语句呈现在请求期间从数据库检索的数据)将 HTML 渲染到浏览器。

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

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

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

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

不断增长的期望

然而,随着用户对 Web 应用程序的期望不断成熟,许多开发人员发现需要构建更动态的前端,其交互感觉更加精致。鉴于此,一些开发人员选择开始使用 JavaScript 框架(如 Vue 和 React)构建应用程序的前端。

另一些人,更喜欢坚持使用他们熟悉的后端语言,已经开发出解决方案,允许在主要利用他们选择的后端语言的同时构建现代 Web 应用程序 UI。例如,在 Rails 生态系统中,这刺激了诸如 TurboHotwireStimulus 等库的创建。

在 Laravel 生态系统中,通过主要使用 PHP 创建现代动态前端的需求导致了 Laravel LivewireAlpine.js 的创建。

Livewire

Laravel Livewire 是一个用于构建 Laravel 支持的前端的框架,它感觉像使用现代 JavaScript 框架(如 Vue 和 React)构建的前端一样动态、现代和生动。

使用 Livewire 时,你将创建 Livewire “组件”,这些组件渲染你的 UI 的离散部分,并公开可以从应用程序的前端调用和交互的方法和数据。例如,一个简单的“计数器”组件可能如下所示

<?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 进行前端开发的方式,让他们在构建现代动态 Web 应用程序时可以待在 Laravel 的舒适区内。通常,使用 Livewire 的开发人员还会使用 Alpine.js 仅在需要时将 JavaScript“洒”在他们的前端上,例如为了渲染对话框窗口。

如果你是 Laravel 的新手,我们建议你熟悉 视图Blade 的基本用法。然后,查阅官方 Laravel Livewire 文档,了解如何使用交互式 Livewire 组件将你的应用程序提升到新的水平。

入门套件

如果你想使用 PHP 和 Livewire 构建前端,你可以利用我们的 Breeze 或 Jetstream 入门套件 来快速启动你的应用程序的开发。这两个入门套件都使用 BladeTailwind 脚手架你的应用程序的后端和前端身份验证流程,这样你就可以简单地开始构建你的下一个伟大的想法。

使用 Vue / React

尽管可以使用 Laravel 和 Livewire 构建现代前端,但许多开发人员仍然更喜欢利用 JavaScript 框架(如 Vue 或 React)的功能。这使开发人员可以利用 NPM 上可用的丰富的 JavaScript 包和工具生态系统。

但是,如果没有额外的工具,将 Laravel 与 Vue 或 React 配对会使我们需要解决各种复杂的问题,例如客户端路由、数据水合和身份验证。客户端路由通常通过使用自以为是的 Vue/React 框架(如 NuxtNext)来简化;但是,当将后端框架(如 Laravel)与这些前端框架配对时,数据水合和身份验证仍然是复杂且繁琐的问题。

此外,开发人员还需要维护两个单独的代码存储库,通常需要在两个存储库之间协调维护、发布和部署。虽然这些问题并非无法克服,但我们认为这不是一种高效或令人愉快的应用程序开发方式。

Inertia

值得庆幸的是,Laravel 提供了两全其美的选择。Inertia 弥合了你的 Laravel 应用程序和你的现代 Vue 或 React 前端之间的差距,允许你使用 Vue 或 React 构建成熟的现代前端,同时利用 Laravel 路由和控制器进行路由、数据水合和身份验证——所有这些都在一个代码存储库中。通过这种方法,你可以享受 Laravel 和 Vue/React 的全部功能,而不会削弱任何工具的功能。

将 Inertia 安装到你的 Laravel 应用程序后,你将像平常一样编写路由和控制器。但是,你将返回一个 Inertia 页面,而不是从控制器返回 Blade 模板

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
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/Profile', [
'user' => User::findOrFail($id)
]);
}
}

Inertia 页面对应于 Vue 或 React 组件,通常存储在应用程序的 resources/js/Pages 目录中。通过 Inertia::render 方法传递给页面的数据将用于水合页面组件的“属性”

<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 入门套件 来快速启动你的应用程序的开发。这两个入门套件都使用 Inertia、Vue/React、TailwindVite 脚手架你的应用程序的后端和前端身份验证流程,这样你就可以开始构建你的下一个伟大的想法。

资源捆绑

无论您选择使用 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 开始您的应用程序开发,这是我们最简单的入门工具包,它通过提供前端和后端身份验证脚手架来快速启动您的应用程序。

lightbulb

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