3. 視圖數(shù)據(jù)View Data和Balde模版 - Laravel從零開始教程

從零學(xué)Laravel目錄列表

我們經(jīng)常需要將數(shù)據(jù)傳遞到視圖層顯示,Laravel中是如何做到這點(diǎn)的呢?那我們就要先了解下Balde模版.

我們現(xiàn)在還是進(jìn)入到我們的Laravel52的項(xiàng)目中,用sublime打開它:

? cd /usr/local/var/www/Laravel52
? subl .

進(jìn)入到route.php文件中,上一節(jié)我們只是顯示一個(gè)靜態(tài)的視圖層,如下:

Route::get('/', function () {
    return view('welcome');
});

下面我們新建一個(gè)$users的數(shù)組,然后將$users數(shù)組中的數(shù)據(jù)傳遞到視圖中去,Laravel提供了多種方法將數(shù)據(jù)傳遞到視圖,我們先來看第一種方法,將一個(gè)數(shù)組作為第二個(gè)參數(shù)傳入到view()函數(shù)中。

Route::get('/', function () {
    $user = ['Zhoujiping', 'Kuker Chou'];

    // 設(shè)置$user數(shù)組的key為users, 以數(shù)組的形式做為第二個(gè)參數(shù)傳遞給
    // view()函數(shù),視圖層就能通過users這個(gè)key拿到$users數(shù)組中的數(shù)據(jù)了
    return view('welcome', ['users' => $users]);
});

還可以對(duì)上面的寫法進(jìn)行簡(jiǎn)化下,我們知道php自帶有一個(gè)compact()函數(shù),這個(gè)函數(shù)能夠創(chuàng)建一個(gè)包含變量名和該變量名對(duì)應(yīng)的值的數(shù)組,如:

$user = 'zhoujiping';
print_r(compact('user'));

// 上面的語(yǔ)句通過compact(),轉(zhuǎn)化成的結(jié)果是['user' => 'zhoujiping']

$users = ['Zhoujiping', 'Kuker Chou'];
print_r(compact('users'));

// 上面的語(yǔ)句通過上面的語(yǔ)句通過compact(),轉(zhuǎn)化成的結(jié)果是
// ['user' => ['Zhoujiping', 'Kuker Chou']]

ok, 現(xiàn)在我們就能更改我們的代碼如下:

Route::get('/', function () {
    $users = ['Zhoujiping', 'Kuker Chou'];

    return view('welcome', compact('users'));
});

如果我們有多個(gè)變量要傳遞,我們可以這么寫:

Route::get('/', function () {
    $country = 'China';
    $users = ['Zhoujiping', 'Kuker Chou'];
    $ages = [10, 20];

    return view('welcome', compact('country', 'users', 'ages'));
});

嗯,像上面這樣寫,代碼是不是干凈很多了,否則如果變量過多,你就需要傳遞一個(gè)長(zhǎng)長(zhǎng)的二維數(shù)組作為view()的第二個(gè)參數(shù),代碼的可讀性就太差了。

除了上面的傳遞參數(shù)的方法,Laravel還提供了with()函數(shù),我們可以這么寫:

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()來傳參數(shù)
   return view('welcome')->with('users', $users);
});

```php
Route::get('/', function () {
   $users = ['Zhoujiping', 'Kuker Chou'];

   // 使用with+自定義的鍵名(如:users),拼接成withUsers()來傳參數(shù)
   return view('welcome')->withUsers($users);
});

如果有多個(gè)變量要傳遞,你可以鏈?zhǔn)秸{(diào)用with(),如:

return view('welcome')->with('users', $users)->with('country', $country)->with('ages', $ages);

好了,傳遞數(shù)據(jù)給view層的方法就是上面幾種了,我比較喜歡使用compact()這種類型,下面我們把route.php中的代碼改回成下面這樣:

Route::get('/', function () {
    $users = ['Zhoujiping', 'Kuker Chou'];
    return view('welcome', compact('users'));
});

下面我們?nèi)ヒ晥D層顯示數(shù)據(jù),我們打開resources/views/welcome.balde.php文件,我們將<body> ... </body>中的內(nèi)容刪除,然后我們先寫一下原生的php的寫法,之后我們?cè)偈褂?code>blade模版,我們可以對(duì)比看下balde是多么的易用,我們先使用php原生的語(yǔ)句來輸出我們的$users數(shù)據(jù), <body>中的代碼如下:

<body>
    <?php foreach ($users as $user) { ?>
        <li><?= $user; ?></li>
    <?php } ?>
</body>

像上面這樣寫是沒有問題的,視圖層能夠正常的加載并渲染數(shù)據(jù),不過如果都是這么去寫的話,那真的是件痛苦的事,現(xiàn)在我們就用laravel自帶的balde模版的寫法來更改一下:

<body>
    @foreach ($users as $user)
        <li>{{ $user }}</li>
    @endforeach
</body>

像上面這樣寫,是不是就感覺代碼清晰很多了,而且balde模版的語(yǔ)法非常容易猜到,基本上都是在php已有的關(guān)鍵字前面加上@符號(hào)作為開頭,以@end加上關(guān)鍵字作為結(jié)尾,比如說上面的數(shù)組循環(huán):

@foreach ($users as $user)
    ...
@endforeach

比如說判斷語(yǔ)句:

@if()
    ...
@else
   ...
@endif

在balde模版中如果要解析變量,我們可以用兩對(duì)大的花括弧{{ $user }},至于blade的更多語(yǔ)法和用法,你可以去翻一翻laravel的官方文檔,如果你沒有時(shí)間看文檔,立馬就要使用laravel,也沒有什么關(guān)系,邊做邊查詢文檔就行,不過空閑的時(shí)候,你還是等把文檔看它個(gè)至少7,8遍吧。

本節(jié)到這里結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容