@can ('destroy', $user) 和{{ route ('users.destroy', $user->id) }}中的 $user 问题

<li>
    <img src="{{ $user->gravatar() }}" alt="{{ $user->name }}" class="gravatar"/>
    <a href="{{ route('users.show', $user->id )}}" class="username">{{ $user->name }}</a>

    @can('destroy', $user)
      <form action="{{ route('users.destroy', $user->id) }}" method="post">
        {{ csrf_field() }}
        {{ method_field('DELETE') }}
        <button type="submit" class="btn btn-sm btn-danger delete-btn">删除</button>
      </form>
    @endcan
</li>

@can 命令里的$user代表当前用户对象,{{}}中的$user代表传递给视图的数据,两者并不一样,是这样理解吗?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10

两者一样,都代表当前的用户

5年前 评论

@wenslim
@foreach ($users as $user)...@endforeach 中,$user不就是一个个的用户吗?
和 @can('destroy', $user)...@endcan 中的$user,这两个是同一个的话,理解不通啊

5年前 评论

你这两个 $user 应该都是在 foreach 中的吧?

5年前 评论

@tongtongtongtong 既然都在同一个 foreach 中,那么这俩就是同一个东西噻....

5年前 评论

file

file
指的是同一个用户,但不是表示当前用户,而是用户列表中遍历出来的每个用户

5年前 评论

can 与 {{}} 中的 $user 是一样的. 都是遍历出的每个用户对象.

can('destroy', $user) 这个里面不用传入当前用户, 与制定安全策略不用传入当前用户对象 ($currentUser) 是一样的道理.

5年前 评论

@heart
@foreach ($users as $user)...@endforeach 中,$user不就是一个个的用户吗?
和 @can('destroy', $user)...@endcan 中的$user,这两个是同一个的话,理解不通啊

这两个$user就是一个同啊 不是同一个才有问题呢
@can('destroy', $user)...@endcan
编译后大概意思不就是
if($currentUser->is_admin && $currentUser->id !== $user->id){
查询到的每条数据都判断下 如果是普通用户才会有删除按钮
}

5年前 评论

都是指要删除的用户,,,策略里面的当前用户会自动加载出来

4年前 评论

这里的$user是从上一层foreach中$users结果集里面遍历出来的单独用户,和当前登录用户没有关系

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!