Laravel 與 Vue.js (現代化 Web 應用)

閱讀時間約 12 分鐘

在這篇文章中,將介紹如何使用 LaravelVue.js 構建一個具有良好使用體驗的 Web 應用。我們將討論如何組織 Laravel 路由與控制器,並展示如何在前端 Vue.js 中進行頁面切換和資料傳遞。這篇文章的核心在於結合 Inertia.jsVue.js,使得前後端可以無縫地合作,提升開發效率與用戶體驗。



資料夾結構介紹

在 Laravel 與 Vue.js 合作開發中,我們通常會看到以下的資料夾結構:

/app
/Http
/Controllers
ShoppingController.php
/resources
/js
/Pages
StepOneView.vue
StepTwoView.vue
StepThreeView.vue
/views
/routes
frontend.php

這個結構遵循了 LaravelVue.js 的標準分佈,使得前端和後端的邏輯能夠清晰地區分開來。在 routes/frontend.php 中,我們會定義頁面路由,並使用 Inertia 來渲染 Vue.js 頁面。


建立 Controller

Laravel 中,我們通常會創建一個控制器來處理應用邏輯。在本範例中,我們會建立一個 ShoppingController,負責渲染頁面與處理資料傳遞。

控制器範例

<?php

namespace App\Http\Controllers;

use Inertia\Inertia;
use App\Models\Shopping;
use Illuminate\Http\Request;

class ShoppingController extends Controller
{
// 頁面產生與連結的方法
public function step01()
{
// 返回第一步驟的頁面
return Inertia::render('Frontend/StepOneView', []);
}

public function step02()
{
// 返回第二步驟的頁面
return Inertia::render('Frontend/StepTwoView', []);
}

public function step03()
{
// 返回第三步驟的頁面
return Inertia::render('Frontend/StepThreeView', []);
}

public function step04(Request $request)
{
// 處理表單提交並儲存資料
$data = $request->all();
Shopping::create([
'name' => $data['name'],
'phone' => $data['phone'],
'email' => $data['email'],
'address01' => $data['address01'],
'address02' => $data['address02'],
'address03' => $data['address03'],
]);

// 返回第四步驟的頁面
return Inertia::render('Frontend/StepFourView');
}
}

在這段程式碼中,我們為每個步驟(step01、step02、step03)定義了一個方法,這些方法將使用 Inertia 返回相對應的 Vue.js 頁面。當用戶填寫完資料後,我們會將資料儲存到資料庫,並跳轉到下一個步驟。


群組化路由管理

為了讓路由更具可維護性,Laravel 提供了路由群組功能。我們可以將相關的路由放在一起,並為這些路由添加共同的前綴,這樣可以讓程式碼更加清晰。

群組化路由範例

// routes/frontend.php

Route::prefix('shopping')->group(function(){
Route::get('step-1', [ShoppingController::class, 'step01'])->name('step-1');
Route::get('step-2', [ShoppingController::class, 'step02'])->name('step-2');
Route::get('step-3', [ShoppingController::class, 'step03'])->name('step-3');
Route::post('shopping-create', [ShoppingController::class, 'step04'])->name('shopping-create');
});

在這個範例中,我們將所有與購物流程相關的路由放入 shopping 群組中,並給每個路由設置了對應的名稱(name() 方法)。這樣,我們就可以在 Vue.js 中輕鬆地引用這些路由。


Vue.js 中頁面切換

使用 Inertia.js,我們可以在 Vue.js 中進行頁面切換,而不需要刷新整個頁面。這意味著我們可以像單頁應用(SPA)一樣操作,不需要重新載入頁面或重新渲染整個頁面。

頁面切換範例

StepOneView.vue 中,我們可以這樣實現頁面切換:

<template>
<button @click="nextStep">下一步</button>
</template>

<script>
import { router } from '@inertiajs/vue3';

export default {
data() {
return {
data: {
furniture1: 0,
furniture2: 0,
furniture3: 0,
},
};
},
methods: {
nextStep() {
if (this.data.furniture1 + this.data.furniture2 + this.data.furniture3 === 0) {
alert('請選擇商品');
return;
}

// 使用 Inertia 進行頁面跳轉
router.get(route('step-2'));
sessionStorage.setItem('object', JSON.stringify(this.data));
},
},
};
</script>

在這段程式碼中,當用戶按下「下一步」按鈕時,我們會檢查表單是否填寫完整。如果滿足條件,就使用 router.get() 方法來跳轉到下一個步驟,並把資料保存在 sessionStorage 中。


StepThreeView 中資料提交

StepThreeView.vue 中,我們需要將表單資料提交到後端,並儲存到資料庫中:

<template>
<button @click="submitForm">提交</button>
</template>

<script>
import { router } from '@inertiajs/vue3';

export default {
data() {
return {
deliverData: {
name: '',
phone: '',
email: '',
addressCity: '',
addressNumber: '',
addressLocation: '',
},
};
},
methods: {
submitForm() {
if (!this.deliverData.name || !this.deliverData.phone || !this.deliverData.email || !this.deliverData.addressCity || !this.deliverData.addressNumber || !this.deliverData.addressLocation) {
alert('請全部填寫');
return;
}

// 提交資料
router.post(route('shopping-create'), {
name: this.deliverData.name,
email: this.deliverData.email,
phone: this.deliverData.phone,
address01: this.deliverData.addressCity,
address02: this.deliverData.addressNumber,
address03: this.deliverData.addressLocation,
});
},
},
};
</script>

這段程式碼會將表單資料提交到 step04 路由,該路由會將資料儲存到資料庫並跳轉到下一個步驟。


結論

在這篇文章中,介紹了如何使用 LaravelVue.js 搭配 Inertia.js 建立現代化的 Web 應用。透過 群組化路由 和清晰的控制器設計,我們能夠有效地管理頁面邏輯和資料流,並且使用 Inertia.js 提供的頁面跳轉機制來保持應用的流暢性和高效性。這樣的架構讓前後端協作更加簡便,同時也能夠利用 Vue.js 來提供豐富的使用者介面。接下來會介紹使用 Laravel 和 Vue 3 建立電影資料管理系統。


對於這類的撰寫方式習慣嗎?歡迎多多進行良性的知識交流喔!目前是在學習階段,大家有不同看法的話歡迎進行良性的知識交流!

 

大家可以考慮多多分享文章和考慮訂閱沙龍方案或贊助等喔!不過請注意不要違反著作權等行為。當然決定權都在於您,不會干涉您的任何決定。

 

提醒,文章僅供正當的知識參考,文章不負任何責任。


avatar-img
0會員
20內容數
有軟體開發相關文章。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
阿棋的沙龍 的其他內容
在現代 Web 開發中,前後端分離的架構越來越受歡迎。本文將帶領你從建立 Laravel 路由、將後端資料傳遞到前端,到如何使用 Tailwind CSS 美化頁面,並將資料儲存到資料庫。
這份指南提供了如何將 Vue.js 和 Laravel 進行集成的詳細步驟,並涵蓋了開發環境的設置、所需的工具、以及相關的安裝和配置方法。下面是步驟的概述與要點,對於有意使用這些技術的開發者將有很大幫助。
在本篇文章中,我們將深入探討如何在 Laravel 中建立關聯資料、使用 Eloquent ORM 操作資料庫,並將資料傳遞到前端視圖。這篇文章將涵蓋從資料庫遷移、Seeder、關聯模型的建立,到資料傳遞的完整流程,並介紹如何在前端展示資料。
在這篇文章中,我們將介紹如何使用 Laravel 的 MVC(模型-視圖-控制器)架構來處理資料的創建、更新、刪除操作,並展示如何使用外鍵連接其他資料表。我們將從前端發送請求到後端,並演示如何在 Controller 中處理這些請求來操作資料。
在 Laravel 框架中,MVC(模型-視圖-控制器)架構是一個常見的設計模式,能有效地幫助我們組織程式碼,將應用的資料邏輯、業務邏輯和視圖展示分開。本文將介紹如何使用 Laravel 的 MVC 架構來創建、讀取、更新和刪除資料(即 CRUD 操作),並將資料顯示到前端頁面上。
在 Laravel 中,操作資料庫的核心是透過 Model 來進行的。Model 不僅負責與資料表進行溝通,它還提供了一個簡單而直觀的方式來進行資料庫的增、刪、改、查等操作。今天,將學習如何建立 Model,創建資料表,並且如何在路由中進行資料操作。
在現代 Web 開發中,前後端分離的架構越來越受歡迎。本文將帶領你從建立 Laravel 路由、將後端資料傳遞到前端,到如何使用 Tailwind CSS 美化頁面,並將資料儲存到資料庫。
這份指南提供了如何將 Vue.js 和 Laravel 進行集成的詳細步驟,並涵蓋了開發環境的設置、所需的工具、以及相關的安裝和配置方法。下面是步驟的概述與要點,對於有意使用這些技術的開發者將有很大幫助。
在本篇文章中,我們將深入探討如何在 Laravel 中建立關聯資料、使用 Eloquent ORM 操作資料庫,並將資料傳遞到前端視圖。這篇文章將涵蓋從資料庫遷移、Seeder、關聯模型的建立,到資料傳遞的完整流程,並介紹如何在前端展示資料。
在這篇文章中,我們將介紹如何使用 Laravel 的 MVC(模型-視圖-控制器)架構來處理資料的創建、更新、刪除操作,並展示如何使用外鍵連接其他資料表。我們將從前端發送請求到後端,並演示如何在 Controller 中處理這些請求來操作資料。
在 Laravel 框架中,MVC(模型-視圖-控制器)架構是一個常見的設計模式,能有效地幫助我們組織程式碼,將應用的資料邏輯、業務邏輯和視圖展示分開。本文將介紹如何使用 Laravel 的 MVC 架構來創建、讀取、更新和刪除資料(即 CRUD 操作),並將資料顯示到前端頁面上。
在 Laravel 中,操作資料庫的核心是透過 Model 來進行的。Model 不僅負責與資料表進行溝通,它還提供了一個簡單而直觀的方式來進行資料庫的增、刪、改、查等操作。今天,將學習如何建立 Model,創建資料表,並且如何在路由中進行資料操作。
你可能也想看
Google News 追蹤
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
在 Vue 中,methods和computed是用於定義元件的行為和計算屬性。本文將介紹methods和computed屬性的使用方法和區別,並通過實際範例來幫助你理解。
Thumbnail
Vue 是尤雨溪所開發的一個前端框架,Vue 提供了響應式數據綁定和組件化的開發模式,能方便開發者構建出具有良好交互性的前端應用。而 Vite 則是一個前端構建工具,用途是提供更快的開發體驗。然後,本文將介紹如何使用 Vite 建立一個 Vue 專案的開發環境,這是你學習 Vue 的第一步。
Thumbnail
在現代的前端開發中,有許多優秀的框架可供選擇,其中包括Angular、React和Vue.js。這些前端框架都擁有自己獨特的特點和優勢,但在選擇合適的框架時可能會感到困惑。本文將介紹Angular、React和Vue.js這三個常見的前端框架的特點和優勢,並分析各個框架的使用情境和適用範圍。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
平常我們在 html 上常看到的例如 v-for、v-model 等等... 也是VUE已經幫我們定義好的指令,而這次我們可以依這自己的需求來建立。 此功能屬於較進階的功能,因此實戰中會比較少見,市面上還是有不少完善的套件能達到同樣效果,建議可以先往這方面察找
Thumbnail
這次要講的是 $route 及 $router 的區別,看似相似的兩個東西,其實應用時機也大不相同,以下以簡單的幾個例子舉例。
Thumbnail
Vue.js是一種基於MVVM的前端JavaScript框架,類似的框架有React、Angular等。 架設環境 安裝Visual Studio Code(https://code.visualstudio.com/) 安裝Node.js(https://nodejs.org/en/
Thumbnail
樣板模式的定義極為簡單,卻是大型系統程式、WEB/APP應用框架的設計核心,完美展現設計模式的價值: 簡單、高效、強大。
Thumbnail
Vue Router 動態路由,假設有一個賣場,裡面有 100 個商品,我們不可能針對它們創 100 對應的路由,因此我們需要一個動態路由,利用"路徑帶參數"的方式來撈取商品的資訊。
Thumbnail
Vue Router 及 具名視圖,擺脫以往切換依賴 CSS display:none 跟 display:block 互相配合,有時還得搭配 z-index 來調整層級跟 opacity 透明度的麻煩,而 Vue Router 完美的解決了這棘手的問題,且能客製頁面想要呈現的擺飾。
Thumbnail
在 Vue 中,methods和computed是用於定義元件的行為和計算屬性。本文將介紹methods和computed屬性的使用方法和區別,並通過實際範例來幫助你理解。
Thumbnail
Vue 是尤雨溪所開發的一個前端框架,Vue 提供了響應式數據綁定和組件化的開發模式,能方便開發者構建出具有良好交互性的前端應用。而 Vite 則是一個前端構建工具,用途是提供更快的開發體驗。然後,本文將介紹如何使用 Vite 建立一個 Vue 專案的開發環境,這是你學習 Vue 的第一步。
Thumbnail
在現代的前端開發中,有許多優秀的框架可供選擇,其中包括Angular、React和Vue.js。這些前端框架都擁有自己獨特的特點和優勢,但在選擇合適的框架時可能會感到困惑。本文將介紹Angular、React和Vue.js這三個常見的前端框架的特點和優勢,並分析各個框架的使用情境和適用範圍。