亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Blade foreach 循環在空時拋出錯誤

Blade foreach 循環在空時拋出錯誤

PHP
慕萊塢森 2023-07-30 13:19:11
我不明白為什么這不起作用。我在 Laravel 中的 Post 和 Tag 兩個模型之間存在多對多關系。顯示帖子時,我的刀片模板中有以下代碼:@if(!empty($page->tags))    @foreach($page->tags as $tag)        @if($loop->last)            {{$tag->name}}        @else            {{$tag->name}},        @endif    @foreach@endif但是,當帖子上沒有標簽時,它會拋出此錯誤:未定義的偏移量:1Illuminate\Foundation\Bootstrap\HandleExceptions::handleError供應商/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLoops.php:95如果我注釋掉 foreach 循環,一切都很好。但由于 if 語句, foreach 循環不應該運行,但顯然試圖運行。我在 if 語句中也嘗試了其他表達式,包括@if(count($page->tags) > 0)和@if(null !== $page->tags)似乎沒有任何作用。我不知道如何優雅地處理標簽的缺失。如果我 dd($page->tags) 它顯示它只是一個空數組,所以我不明白為什么這不起作用。
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

您沒有關閉您的@foreach,您使用了第二個。但請考慮以下信息!


@if(!empty($page->tags))

    @foreach($page->tags as $tag)

        @if($loop->last)

            {{$tag->name}}

        @else

            {{$tag->name}},

        @endif

    @endforeach

@endif

*** 相關且可能對類似錯誤有用 **


這里的問題是您正在使用 $page->tags 獲取 Collection,并且它不會像您想象的那樣與 empty() 交互。


在 PHP 中:


$obj = (object) [];

empty($obj);


// returns false

Laravel Collection 是一個對象,因此即使 $page->tags 中沒有任何項目,您實際上也在做:


empty(collect())

// returns false

如果您可以保證 $page->tags 始終被設置,那么您可以使用收集方法:


@if($page->tags->isNotEmpty())

@endif

但是,如果有時 $page->tags 為空(即標簽未加載到頁面上),那么您可以使用:


@if(isset($page->tags))

@endif

綜上所述,如果 $page->tags 始終存在(已加載),則 @foreach 語法不應出錯,因為 Collection 是可迭代的,并且相當于執行foreach ([] as $item) {}.


查看完整回答
反對 回復 2023-07-30
  • 1 回答
  • 0 關注
  • 153 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號