引言
上一期我們通過分配路由地址,在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 協議》,轉載必須註明作者和本文連結