iT邦幫忙

2024 iThome 鐵人賽

DAY 7
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 7

DAY7-練習撰寫Laravel框架中的blade模版-(2)

  • 分享至 

  • xImage
  •  

哈囉大家好~
今天因為是假日,有更充分的時間來寫文章啦XD
除了昨天提到的模版繼承功能,今天要來學習如何在模板中呈現數據以及如何傳遞數據。
那就開始吧!

在前幾天討論routes的時候有提到可以透過route來傳遞數據,範例程式碼如下:

return view('home', ['user' => 'JoJo']);

也可以利用with這個method來傳遞數據,程式碼如下:

return view('home')
        ->with('user' => 'JoJo')
        ->with('hobby' => 'dancing')

除了傳遞數據到指定的頁面之外,若我想要將特定數據顯示在多個頁面,可以如何用程式碼實現呢?
首先要到路徑app/Providers這個目錄的AppServiceProvider.php中,
在boot() function中利用share()傳遞想要分享至全部頁面的數據:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        View::share('hello', 'World');
    }
}

這裡share()裡面有兩個參數,第一個就是變數,第二個是該變數對應的值。
假設我想要讓這個數據顯示在下方的blade模版:

<!DOCTYPE html>
<html>
    <head>

    </head>
    <body>
        <h1>Hello World! My first Laravel Project!</h1>
        <h3>{{ $hello }}</h3>    
    </body>
</html>

在blade模版中變數要用{{}}包起來,就可以看到剛剛傳送的變數值World。

除了上述方法之外,我們也可以用View Composers來傳遞數據!
View Composers可以是callback function也可以是class methods,當要呈現特定畫面時就會被呼叫。
什麼時候會需要使用到View Composers呢?
當某畫面每次被渲染時,想要一起更新或呈現的數據就可以利用View Composers來撰寫:(在AppServiceProvider.php中撰寫composer)

<?php

namespace App\Providers;

use Illuminate\Support\Facades;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\View;

class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {   
        Facades\View::composer('hello', function (View $view) {
            $view->with('message', 'shout out to Laravel!');
        });   
    }
}

上方程式碼表示,我將$message這個變數傳給hello.blade.php這個模版,變數的值是'shout out to Laravel!',所以我可以在模版中使用這個變數:

<!DOCTYPE html>
<html>
    <head>

    </head>
    <body>
        <h1>Hello World! My first Laravel Project!</h1>
           <h1>{{ $message }}</h1>
    </body>
</html>

畫面上就會顯示大大的“shout out to Laravel!”
把處理路由和數據的邏輯分開,日後在維護程式碼上也相對容易~


今天也簡單分享了在blade模版中如何傳遞數據,接下來想要學習如何一次傳遞更多的數據、傳遞不同的數據類型(例如:物件、陣列⋯⋯等)
以及如何利用迴圈來呈現數據,條件句判斷數據是否顯示。
那就明天再見囉!
希望大家週末都能好好休息,有個愉快的假日/images/emoticon/emoticon07.gif


上一篇
DAY6-練習撰寫Laravel框架中的blade模版-(1)
下一篇
DAY8-練習撰寫Laravel框架中的blade模版-(3)
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言