簡體   English   中英

Laravel 6 null 合並運算符給出未定義的變量:用戶在調用它的方法時?

[英]Laravel 6 null coalescing operator gives Undefined variable: user when calling a method on it?

我正試圖讓這個工作。

<option value="{{$role->id}}" {{ (collect(old('userrole') ?? $user->roles()->pluck('id')->implode(", ") ?? '')->contains($role->id)) ? 'selected':'' }}>{{$role->name}}</option>

由於某種原因,它不起作用。 它返回錯誤:未定義的變量:用戶。

有什么幫助嗎?

空合並運算符?? 將檢查最終結果是否為 null - 它不會考慮任何可能未聲明以獲得該結果的變量。

因此,您可以使用三元運算符來查看是否為該表達式設置了$roles值。

{{ (collect(
           old('userrole') 
             ?? (isset($user) 
                     ? $user->roles()->pluck('id')->implode(", ") 
                     : ''
                 )
            )->contains($role->id)) 
             ? 'selected'
             : '' }}

old()助手還接受第二個參數,如果該值不存在,則作為“默認”,您可以使用它。 並且由於您正在尋找單個值,因此可以使用刀片@if塊替換對selected output 的三元運算符的使用。

<option value="{{$role->id}}" 
    @if (collect(old('userrole', (isset($user) ? $user->roles()->pluck('id')->implode(", ") : ''))->contains($role->id)))
        selected
    @endif 
>{{$role->name}}</option>

您還可以通過在 object 本身上使用contains()來減少代碼中的混亂(無需 pluck pluck() id`)。

<option value="{{ $role->id }}" 
    @if (collect(old('userrole', (isset($user) ? $user->roles())->contains($role->id)))
        selected
    @endif 
>{{ $role->name }}</option>

當值未定義時,刀片合並運算符只能在渲染刀片文件時捕獲錯誤。 “崩潰”來自於在未定義的變量上調用關系->roles() 基本上,它在到達合並操作員可以保存它的地步之前就崩潰了。 當您嘗試在刀片模板中提取這樣的關系時,您需要確保首先定義變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM