引言
上一期我們通過配置設定路由位址,在url中接收位置參數并傳遞給控制器方法,
并且在控制器内簡單地列印輸出接收的參數。

本期我們嘗試着使用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 :-)
我是 @程式員小助手 ,持續分享程式設計知識,歡迎關注。