iT邦幫忙

2024 iThome 鐵人賽

DAY 17
0
Software Development

Laravel 隨筆學習札記系列 第 17

Day17 - 探索 Laravel 的視覺魔法:使用 Blade 的佈局與繼承

  • 分享至 

  • xImage
  •  

今天來小聊聊 MVC 的 View,在 Laravel 的 Blade,他們是什麼關係哇?基於個人的好奇,就淺淺來研究吧!

Laravel 的 View 跟 Blade 是什麼關係?

Laravel View?

在 Laravel 中,View 是用來顯示資料的部分,我個人初淺的理解是負責前端的畫面,View 和 Controller、Model 是分開的,這樣做的好處是能讓程式碼結構更清晰,也讓維護變得簡單多了。

Laravel 的 View 通常放在 resources/views 目錄下,在 Laravel 中以 .blade.php 為副檔名。

Laravel Blade?

Blade 是 Laravel 的模板引擎,用於創建和管理 View 的工具,提供了一種簡單的語法,讓我們可以輕鬆地編寫 HTML 和 PHP 的程式碼,以提高性能。Blade 的副檔名為 .blade.php,並支持使用變數、條件語句和迴圈等功能來處理顯示邏輯。

討論:

所有的 Blade 都是 View,但並不是所有的 View 都是 Blade 。Laravel 其實也可以用其他格式的 View,例如 HTML 和 PHP 檔案。不過大多數開發者都會選擇 Blade處理 HTML 和動態資料的結合,因為比較方便!


建立與管理 View

要建立一個新的視圖,只需在 resources/views 目錄下創建一個 .blade.php 檔案。

  1. 例如,創建一個名為 test.blade.php 的檔案:
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>TEST</title>
</head>
<body>
    <h2>This is a test</h2>
</body>
</html>
  1. 接著,在控制器中使用 view() 方法呼叫這個視圖:
namespace App\\Http\\Controllers;

use Illuminate\\Routing\\Controller;

class TestController extends Controller
{
    public function test()
    {
        return view('test'); // 呼叫 resources/views/test.blade.php
    }
}

傳遞資料到 View

  1. 在控制器中使用 view() 方法傳遞資料到 pages/test.blade.php
public function test()
{
    return view('pages.test', [
        'name' => 'JohnsonLu',
        'gender' => 'Man',
        'items' => ['Milk', 'Tea']
    ]);
}

  1. 在對應的視圖 pages/test.blade.php ****中,可以使用這些變數:
<h2>Hello, I am {{ $name }}</h2>

@if ($gender === 'Man')
    <h4>Man</h4>
@else
    <h4>Woman</h4>
@endif

<h4>Which one do you like?</h4>
<ul>
@foreach ($items as $item)
    <li>{{ $item }}</li>
@endforeach
</ul>

Blade 語法基本用法

Blade 提供了簡潔的語法來處理顯示邏輯,包括變數輸出、條件語句和迴圈。

變數輸出

使用 {{ $variable }} 來顯示變數。

條件語句

@if ($condition)
    // 內容
@endif

迴圈

@foreach ($items as $item)
    <li>{{ $item }}</li>
@endforeach

佈局與繼承

Blade 支持視圖的佈局和繼承,使得 HTML 結構變得較為方便。

  1. 創建一個主佈局檔案,例如 views/app.blade.php
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>App Name - @yield('title')</title>
</head>
<body>
@section('page-name')
<h3>This page is:</h3>
@show

<div class="container">
    @yield('content')
</div>
</body>
</html>

  1. 然後在其他視圖中繼承 views/test.blade.php ****這個佈局:
@extends('layouts.app')

@section('title', 'Test Page')

@section('content')
<p>This is my body content.</p>
@endsection


子視圖與組件

  1. 例如,將頁面的標頭抽取到單獨的檔案中 views/includes/header.blade.php
<header>
    <h1>Welcome to My Site</h1>
</header>
  1. 然後在主視圖 views/test.blade.php ****中,使用 Blade 的 @include 指令來引入子視圖:
@include('includes.header')
@section('content')
<p>This is my body content.</p>
@endsection

簡單的範例

以下是一個簡單的任務清單應用,從建立 View 到呈現資料的過程。

建立 Controller

namespace App\\Http\\Controllers;

use Illuminate\\Routing\\Controller;

class TaskController extends Controller
{
    public function index()
    {
        $tasks = ['Task 1', 'Task 2', 'Task 3'];
        return view('tasks.index', compact('tasks'));
    }
}

建立 View

resources/views/tasks/index.blade.php

@extends('layouts.app')

@section('title', 'Task List')

@section('content')
<h1>My Tasks</h1>
<ul>
@foreach ($tasks as $task)
    <li>{{ $task }}</li>
@endforeach
</ul>
@endsection

設定 Route

Route::get('/tasks', [TaskController::class, 'index']);

參考資料:

  1. Laravel初學者指南:了解視圖(View)的運作與應用
  2. Mastering Laravel Blade Components: A Step-by-Step Guide
  3. Laravl官方網站 - Views
  4. Laravl官方網站 - Blade Templates

踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!

聖杯國王:作為後端工程師,和前端開發者建立良好的溝通真的很重要,積極參加需求討論,了解用戶的期望。透過想像和合作,一起創造出更符合需求的解決方案,讓產品質量更加出色。

みんな笑ってみな。おっかないのは逃げちゃうから。

我們一起大笑看看,可怕的東西就會跑光光了唷!

- 龍貓


上一篇
Day16 - 資料的守護者:如何使用 Laravel Model 的屬性
下一篇
Day18 - Laravel Middleware:隱藏在應用背後的守護者
系列文
Laravel 隨筆學習札記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言