天天看點

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

引言

上一期我們通過配置設定路由位址,在url中接收位置參數并傳遞給控制器方法,

并且在控制器内簡單地列印輸出接收的參數。

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

本期我們嘗試着使用laravel的模闆功能,把控制器内組裝好的資料渲染到視圖模闆檔案,

并做展示。

代碼時間

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

接收到路由傳遞的 $id 變量後,我們将其附加到視圖渲染函數,并發送到模闆檔案。

代碼是這樣的:

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

使用 view 函數傳回 IlluminateViewView 對象的 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 :-)

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