Laravel 是一個後端框架,提供了建立現代 Web 應用程式所需的所有功能,例如 路由、驗證、快取、佇列、檔案儲存 等。然而,我們認為為開發人員提供美觀的全端體驗是很重要的,包括強大的方法來建立應用程式的前端。
在使用 Laravel 建立應用程式時,有兩種主要方式來處理前端開發,您可以選擇使用 PHP 或使用 JavaScript 框架如 Vue 和 React 來建立前端。我們將在下面討論這兩種選項,讓您可以就應用程式的前端開發最佳方式做出明智的決定。
過去,大多數 PHP 應用程式使用簡單的 HTML 模板與 PHP echo
陳述式將 HTML 渲染到瀏覽器,這些陳述式會渲染在請求期間從資料庫擷取的資料:
<div>
<?php foreach ($users as $user): ?>
Hello, <?php echo $user->name; ?> <br />
<?php endforeach; ?>
</div>
在 Laravel 中,仍然可以使用 視圖 和 Blade 實現這種渲染 HTML 的方式。Blade 是一種非常輕量級的模板語言,提供了方便、簡短的語法來顯示資料、迭代資料等:
<div>
@foreach ($users as $user)
Hello, {{ $user->name }} <br />
@endforeach
</div>
以這種方式建立應用程式時,表單提交和其他頁面互動通常會從伺服器接收到一個全新的 HTML 文件,並且整個頁面會被瀏覽器重新渲染。即使在今天,許多應用程式可能非常適合以這種方式構建其前端,使用簡單的 Blade 模板。
然而,隨著用戶對 Web 應用程序的期望日益成熟,許多開發人員發現需要構建更具動態性的前端,使互動感覺更加精緻。鑑於此,一些開發人員選擇開始使用 JavaScript 框架(如 Vue 和 React)來構建其應用程序的前端。
其他人則更傾向於堅持使用他們熟悉的後端語言,開發出允許構建現代 Web 應用程序 UI 的解決方案,同時仍主要利用他們選擇的後端語言。例如,在 Rails 生態系統中,這促使了像 Turbo、Hotwire 和 Stimulus 這樣的庫的創建。
在 Laravel 生態系統中,通過主要使用 PHP 創建現代、動態的前端的需求導致了 Laravel Livewire 和 Alpine.js 的創建。
Laravel Livewire 是一個用於構建 Laravel 驅動的前端的框架,使其感覺動態、現代且生動,就像使用現代 JavaScript 框架(如 Vue 和 React)構建的前端一樣。
使用 Livewire 時,您將創建 Livewire "組件",這些組件呈現 UI 的一個獨立部分,並公開可以從應用程序的前端調用和互動的方法和數據。例如,一個簡單的 "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 的前端開發,使他們能夠在構建現代、動態 Web 應用程序時保持 Laravel 的舒適感。通常,使用 Livewire 的開發人員還將利用 Alpine.js 在前端上僅在需要時 "撒點" JavaScript,例如為了呈現對話框。
如果您是 Laravel 的新手,我們建議您熟悉 視圖 和 Blade 的基本用法。然後,請參考官方的 Laravel Livewire 文件,了解如何通過互動式 Livewire 元件將應用程序提升到下一個水平。
如果您想使用 PHP 和 Livewire 構建前端,您可以利用我們的 Livewire 起始套件 來加速應用程序的開發。
儘管使用 Laravel 和 Livewire 可以構建現代前端,但許多開發人員仍然更喜歡利用像 React 或 Vue 這樣的 JavaScript 框架的強大功能。這使開發人員能夠利用通過 NPM 提供的豐富 JavaScript 套件和工具生態系統。
然而,如果沒有額外的工具支持,將 Laravel 與 React 或 Vue 搭配使用將需要解決各種複雜的問題,例如客戶端路由、數據注入和身份驗證。通常,使用具有明確意見的 React / Vue 框架(如 Next 和 Nuxt)可以簡化客戶端路由,但數據注入和身份驗證仍然是搭配後端框架像 Laravel 與這些前端框架時需要解決的複雜和繁瑣的問題。
此外,開發人員需要維護兩個獨立的程式庫,通常需要協調兩個程式庫之間的維護、發布和部署。雖然這些問題並非無法克服,但我們認為這不是一種有效或令人愉快的應用程序開發方式。
幸運的是,Laravel 提供了最佳的解決方案。Inertia 橋接了您的 Laravel 應用程序與現代 React 或 Vue 前端之間的差距,使您可以使用 React 或 Vue 構建完整的現代前端,同時利用 Laravel 的路由和控制器進行路由、數據注入和身份驗證 — 一切都在單一程式庫中。通過這種方法,您可以充分發揮 Laravel 和 React / Vue 的功能,而不會削弱任何工具的功能。
在將 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
{
/**
* Show the profile for a given user.
*/
public function show(string $id): Response
{
return Inertia::render('users/show', [
'user' => User::findOrFail($id)
]);
}
}
Inertia 頁面對應於 React 或 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 或 Vue 的功能,同時在 Laravel 強大的後端和 JavaScript 強大的前端之間提供輕量級的橋樑。
如果您擔心深入研究 Inertia,因為您的應用程式需要伺服器端渲染,請不用擔心。Inertia 提供了 伺服器端渲染支援。而且,當通過 Laravel Cloud 或 Laravel Forge 部署您的應用程式時,確保 Inertia 的伺服器端渲染過程始終運行非常輕鬆。
如果您想使用 Inertia 和 Vue / React 構建您的前端,您可以利用我們的 React 或 Vue 應用程式起始套件 來快速啟動應用程式的開發。這兩個起始套件都使用 Inertia、Vue / React、Tailwind 和 Vite 為您的應用程式的後端和前端身份驗證流程搭建腳手架,讓您可以開始構建您的下一個大型項目。
無論您選擇使用 Blade 和 Livewire 還是 Vue / React 和 Inertia 開發前端,您可能需要將應用程式的 CSS 打包成產品就緒的資源檔。當然,如果您選擇使用 Vue 或 React 構建應用程式的前端,您還需要將組件打包成瀏覽器就緒的 JavaScript 資源檔。
預設情況下,Laravel 使用 Vite 來打包您的資源檔。Vite 提供快速的建置時間和在本地開發期間幾乎即時的熱模組替換(HMR)。在所有新的 Laravel 應用程式中,包括使用我們的 入門套件 的應用程式,您將找到一個 vite.config.js
檔案,該檔案載入我們輕量級的 Laravel Vite 插件,使 Vite 與 Laravel 應用程式一起使用變得輕鬆愉快。
使用 Laravel 和 Vite 開始應用程式開發的最快方法是使用 我們的應用程式入門套件,這些套件通過提供前端和後端認證脚手架來快速啟動您的應用程式。
Note
有關在 Laravel 中使用 Vite 的更詳細文件,請參閱我們關於打包和編譯您的資源檔的 專用文件。