Laravel 6 null coalescing operator 在调用方法时给出 Undefined variable: user?

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>

由于某种原因,它不起作用。它返回错误:Undefined variable: user.

有什么帮助吗?

null-coalescing 运算符 ?? 将检查最终结果是否为 null - 它不会考虑任何可能未声明的变量以获得该结果。

因此,您可以使用三元运算符来查看是否为该表达式设置了 $roles 值。

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

old() 帮助程序还需要第二个参数,因为 "default" 如果该值不存在,您可以使用它。由于您正在寻找单个值,因此可以将使用三元运算符输出 selected 替换为 blade @if 块。

<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() 来减少代码中的 som 混乱(无需 pluck() id`)。

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