3分鐘短文:可能是Laravel模板最直白的用法了,沒有之一

ragus發表於2020-09-25

引言

上一期我們通過分配路由地址,在url中接收位置引數並傳遞給控制器方法,

並且在控制器內簡單地列印輸出接收的引數。

圖片

本期我們嘗試著使用laravel的模板功能,把控制器內組裝好的資料渲染到檢視模板檔案,

並做展示。

程式碼時間

我們把目光還暫時放在控制器的方法內,接著前一章的 EventsController@show 方法。

接收到路由傳遞的 $id 變數後,我們將其附加到檢視渲染函式,併傳送到模板檔案。

程式碼是這樣的:

public function show($id)
{
    return view('events.show')->with('id', $id);
}

使用 view* 函式返回 Illuminate\View\View 物件的 with 方法,就可以傳遞資料到模板了。

模板檔案的地址在 resources/views/events/show.blade.php,我們追加一行內容:

<p>We're looking at event ID #{{ $id }}.</p>

其中 {{ $id }} 就是控制器內傳遞來的變數,模板內使用雙大括號進行包裹,模板最後解析為以下的PHP程式碼:

<?php echo $id; ?>

簡單地進行了變數列印輸出。此時瀏覽器內我們仍然訪問這個url地址:

http://example.dev/events/42

正常的情況下輸出內容如下:

see We're looking at event ID #42. 

說明從路由,到控制器處理,到檢視渲染,都已經正常地工作了。

laravel為什麼說是最優雅的框架呢?因為提供了許多優雅的方法,比如上面控制器方法內,

使用 View 物件的 with 方法,可以傳遞鍵值對,傳遞陣列。如果傳遞的是單個變數值,

有一個語法糖可以使用,如下程式碼:

public function show($id)
{
    return view('events.show')->withId($id);
}

其中 withId 就是與ORM查詢內的 whereId 等等一直,都會解析為 with(‘id’, $id) 的樣式,

我們只需按照首字元大寫的駝峰方式書寫即可。

傳遞多個變數

上一節只在檢視渲染的時候,傳遞了一個變數值,而實際業務中,我們不可能把所有的資料,都寫入到同一個變數內,

然後在模板使用單個組裝的變數。

所以我們嘗試同時傳遞多個變數,很容易實現,如果你不厭其煩,多次呼叫with方法即可:

public function show($id)
{
    return view('events.show')->with('id', $id)->with('name', 'Laravel Hacking and Coffee');
}

在模板內,就可以直接使用 $id$name 兩個變數了:

<p>{{ $name }} has the event ID #{{ $id }}.</p>

正常是沒有什麼問題的,會正確地渲染為指定資料。

一般我們沒必要寫一大串的 with 函式,一個變數一個變數地傳遞。可以組裝為陣列,傳遞給 view 助手函式的第二個位置引數,

比如下面這樣:

$name = 'Head First PHP';
$date = date('Y-m-d');
return view('welcome', compact('name', 'date'));

使用compact函式將兩個變數包裹為鍵值對的陣列傳遞給 view 函式,就可以正常在檢視模板內使用了。

或者為了直觀一些,我們自己封裝這個陣列結構:

public function show($id)
{
    $data = [
        'name' => 'Head First PHP',
        'date' => date('Y-m-d')
    ];
    return view('events.show')->with($data);
}

檢視內對於這樣的單個變數的值,直接輸出就是了:

{{ $name }} is scheduled for {{ $date }}!

寫在最後

本文通過多種方法對從控制器內接收和組裝的資料通過檢視方法 view 函式

渲染到模板檔案並展示,為了演示功能,我們使用的都是單個變數沒有複雜結構的資料。

下一章我們繼續深入模板的高階功能。

Happy coding :-)

我是@程式設計師小助手,持續分享程式設計知識,歡迎關注。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
write-less-do-more-make-you-out-of-door

相關文章