Laravel 編碼技巧 視圖

2023-02-16 17:10 更新

foreach 語(yǔ)句中的 $loop 變量

在 foreach 循環(huán)中,使用 $loop 變量來(lái)查看當(dāng)前是否是第一次 / 最后一次循環(huán)。

@foreach ($users as $user)
     @if ($loop->first)
        第一次迭代。
     @endif

     @if ($loop->last)
        最后一次迭代。
     @endif

     <p>該用戶id是:{{ $user->id }}</p>
@endforeach

同樣也有諸如 $loop->iteration 或 $loop->count 等屬性??梢栽?nbsp;官方文檔 中查看更多相關(guān)內(nèi)容。

視圖是否存在?

你可以在視圖實(shí)際加載之前確認(rèn)該視圖文件是否存在。

if (view()->exists('custom.page')) {
 // 載入視圖
}

你甚至可以使用一個(gè)數(shù)組來(lái)加載視圖,這樣只有第一個(gè)視圖文件確實(shí)存在的視圖會(huì)被加載。

return view()->first(['custom.dashboard', 'dashboard'], $data);

錯(cuò)誤代碼視圖頁(yè)面

如果你想為一些特殊的 HTTP 返回碼建立特定的錯(cuò)誤頁(yè)面,比如 500 —— 只需要使用該碼值創(chuàng)建視圖文件,比如 resources/views/errors/500.blade.php ,或者是 403.blade.php 等等,這些視圖會(huì)在對(duì)應(yīng)的錯(cuò)誤碼出現(xiàn)時(shí)自動(dòng)被加載。

脫離控制器的視圖

如果你想讓一個(gè)路由僅僅顯示某個(gè)視圖,不需要?jiǎng)?chuàng)建控制器,只需要使用 Route::view() 方法即可。

// 不要這樣做
Route::get('about', 'TextsController@about');

class TextsController extends Controller
{
    public function about()
    {
        return view('texts.about');
    }
}

// 這樣做
Route::view('about', 'texts.about');

視圖 @auth 指令

不需要使用 if 來(lái)檢查用戶是否登錄,使用 @auth 指令即可。

比較典型的方式是:

@if(auth()->user())
    // 該用戶已登錄
@endif

更短的用法:

@auth
    // 該用戶已登錄
@endauth

與 @auth 相對(duì)的是 @guest 指令:

@guest
    // 該用戶未登錄
@endguest

Blade 視圖中的二級(jí) $loop 變量

你甚至可以在 Blade 視圖的二級(jí) foreach 循環(huán)中使用 $loop 變量來(lái)表示外層的循環(huán)變量。

@foreach ($users as $user)
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            這是父級(jí)循環(huán)中的第一次迭代
        @endif
    @endforeach
@endforeach

創(chuàng)建你自己的 Blade 指令

你只需要在 app/Providers/AppServiceProvider.php 中添加你自己的方法。舉個(gè)例子,如果你需要將 <br> 標(biāo)簽替換為換行:

<textarea>@br2nl($post->post_text)</textarea>

然后將這個(gè)指令添加到 AppServiceProvider 的 boot() 方法中:

public function boot()
{
    Blade::directive('br2nl', function ($string) {
        return "<?php echo preg_replace('/\<br(\s*)?\/?\>/i', \"\n\", $string); ?>";
    });
}

視圖指令: IncludeIf,IncludeWhen,IncludeFirst

如果你不確定 Blade 文件是否存在,你可以使用這些條件指令。

僅當(dāng) Blade 文件存在時(shí)載入 header:

@includeIf('partials.header')

僅當(dāng)用戶的 role_id == 1 的時(shí)候載入 header:

@includeWhen(auth()->user()->role_id == 1, 'partials.header')

嘗試加載 adminlte.header ,如果不存在,則加載 default.header

@includeFirst('adminlte.header', 'default.header')


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)