我們經常需要將數據傳遞到視圖層顯示,Laravel中是如何做到這點的呢?那我們就要先了解下Balde模版.
我們現在還是進入到我們的Laravel52的項目中,用sublime打開它:
? cd /usr/local/var/www/Laravel52
? subl .
進入到route.php文件中,上一節我們只是顯示一個靜態的視圖層,如下:
Route::get('/', function () {
return view('welcome');
});
下面我們新建一個$users
的數組,然后將$users
數組中的數據傳遞到視圖中去,Laravel提供了多種方法將數據傳遞到視圖,我們先來看第一種方法,將一個數組作為第二個參數傳入到view()
函數中。
Route::get('/', function () {
$user = ['Zhoujiping', 'Kuker Chou'];
// 設置$user數組的key為users, 以數組的形式做為第二個參數傳遞給
// view()函數,視圖層就能通過users這個key拿到$users數組中的數據了
return view('welcome', ['users' => $users]);
});
還可以對上面的寫法進行簡化下,我們知道php自帶有一個compact()
函數,這個函數能夠創建一個包含變量名和該變量名對應的值的數組,如:
$user = 'zhoujiping';
print_r(compact('user'));
// 上面的語句通過compact(),轉化成的結果是['user' => 'zhoujiping']
$users = ['Zhoujiping', 'Kuker Chou'];
print_r(compact('users'));
// 上面的語句通過上面的語句通過compact(),轉化成的結果是
// ['user' => ['Zhoujiping', 'Kuker Chou']]
ok, 現在我們就能更改我們的代碼如下:
Route::get('/', function () {
$users = ['Zhoujiping', 'Kuker Chou'];
return view('welcome', compact('users'));
});
如果我們有多個變量要傳遞,我們可以這么寫:
Route::get('/', function () {
$country = 'China';
$users = ['Zhoujiping', 'Kuker Chou'];
$ages = [10, 20];
return view('welcome', compact('country', 'users', 'ages'));
});
嗯,像上面這樣寫,代碼是不是干凈很多了,否則如果變量過多,你就需要傳遞一個長長的二維數組作為view()
的第二個參數,代碼的可讀性就太差了。
除了上面的傳遞參數的方法,Laravel還提供了with()
函數,我們可以這么寫:
Route::get('/', function () {
$users = ['Zhoujiping', 'Kuker Chou'];
return view('welcome')->with('users', $users);
});
我們也可以講with('users', $users)
這里的'user'健和with
憑借在一起,將'users'的首字母變大寫, 變成withUsers($user)
,我們看下整體的代碼:
Route::get('/', function () {
$users = ['Zhoujiping', 'Kuker Chou'];
// 使用with()來傳參數
return view('welcome')->with('users', $users);
});
```php
Route::get('/', function () {
$users = ['Zhoujiping', 'Kuker Chou'];
// 使用with+自定義的鍵名(如:users),拼接成withUsers()來傳參數
return view('welcome')->withUsers($users);
});
如果有多個變量要傳遞,你可以鏈式調用with()
,如:
return view('welcome')->with('users', $users)->with('country', $country)->with('ages', $ages);
好了,傳遞數據給view層的方法就是上面幾種了,我比較喜歡使用compact()
這種類型,下面我們把route.php中的代碼改回成下面這樣:
Route::get('/', function () {
$users = ['Zhoujiping', 'Kuker Chou'];
return view('welcome', compact('users'));
});
下面我們去視圖層顯示數據,我們打開resources/views/welcome.balde.php
文件,我們將<body> ... </body>
中的內容刪除,然后我們先寫一下原生的php的寫法,之后我們再使用blade
模版,我們可以對比看下balde是多么的易用,我們先使用php原生的語句來輸出我們的$users
數據, <body>中的代碼如下:
<body>
<?php foreach ($users as $user) { ?>
<li><?= $user; ?></li>
<?php } ?>
</body>
像上面這樣寫是沒有問題的,視圖層能夠正常的加載并渲染數據,不過如果都是這么去寫的話,那真的是件痛苦的事,現在我們就用laravel自帶的balde
模版的寫法來更改一下:
<body>
@foreach ($users as $user)
<li>{{ $user }}</li>
@endforeach
</body>
像上面這樣寫,是不是就感覺代碼清晰很多了,而且balde模版的語法非常容易猜到,基本上都是在php已有的關鍵字前面加上@
符號作為開頭,以@end
加上關鍵字作為結尾,比如說上面的數組循環:
@foreach ($users as $user)
...
@endforeach
比如說判斷語句:
@if()
...
@else
...
@endif
在balde模版中如果要解析變量,我們可以用兩對大的花括弧{{ $user }}
,至于blade的更多語法和用法,你可以去翻一翻laravel的官方文檔,如果你沒有時間看文檔,立馬就要使用laravel,也沒有什么關系,邊做邊查詢文檔就行,不過空閑的時候,你還是等把文檔看它個至少7,8遍吧。
本節到這里結束。