在 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);
如果你想為一些特殊的 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');
不需要使用 if 來(lái)檢查用戶是否登錄,使用 @auth
指令即可。
比較典型的方式是:
@if(auth()->user())
// 該用戶已登錄
@endif
更短的用法:
@auth
// 該用戶已登錄
@endauth
與 @auth
相對(duì)的是 @guest
指令:
@guest
// 該用戶未登錄
@endguest
你甚至可以在 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
你只需要在 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); ?>";
});
}
如果你不確定 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')
更多建議: