首页 > 解决方案 > laravel 中 @if 和 @can 有什么区别

问题描述

正在与不同的用户一起制作项目。我注意到我可以@if用来阻止特定用户使用特定功能,但我也可以使用@can. 有人可以告诉我他们的区别是什么。我没有注册任何政策,AuthServiceProvider但我仍然可以使用@can方法。我只是指用户的类型。我会给你看一些代码。

   @can($global_user->role != 0)
            <li class="{{ $mnuname == 'Issue' ? 'active' : '' }}">
              <a href="{{ route('admin.issues') }}" onclick="return LoadingOverlay();">
                <i class="fa fa-list"></i>
                <span>Issue Tracker</span>
              </a>
            </li>
  @endcan

如果

   @if($global_user->role != 0)

        <li class="{{ $mnuname == 'Student' ? 'active' : '' }}">
          <a href="{{ route('admin.students') }}" onclick="return LoadingOverlay();">
            <i class="fa fa-child"></i>
            <span>Students</span>
          </a>
        </li>
@endif

编辑:我也可以使用这样的@can内部@if语句吗?

    @if($global_user->role != 0)
        <li class="treeview
            {{ $mnuname == 'New Issue' ? 'active' : '' }}
            {{ $mnuname == 'Issue' ? 'active' : '' }}
            ">
          <a href="#">
            <i class="fa fa-bug"></i> <span>System Issues</span>
            <span class="pull-right-container">
              <i class="fa fa-angle-left pull-right"></i>
            </span>
          </a>
          <ul class="treeview-menu">

            <li class="{{ $mnuname == 'New Issue' ? 'active' : '' }}">
              <a href="{{ route('admin.issues.create') }}" onclick="return LoadingOverlay();">
                <i class="fa fa-edit"></i>
                <span>Report an Issue</span>
              </a>
            </li>


            @can($global_user->role != 3)
            <li class="{{ $mnuname == 'Issue' ? 'active' : '' }}">
              <a href="{{ route('admin.issues') }}" onclick="return LoadingOverlay();">
                <i class="fa fa-list"></i>
                <span>Issue Tracker</span>
              </a>
            </li>
            @endcan


          </ul>
        </li>
        @endif

标签: phplaravellaravel-5conditional-statements

解决方案


@if指令用于渲染刀片模板中的条件部分。and@can指令用于authorize基于laravel 中的Gateand的用户。Policy

@if 指令示例

@if($global_user->role == admin)

 //only to shows this portion to admin user
@endif

@can 指令示例

@can($global_user->role == admin)

 //here this portion verify by Gate and policy and middleware only ADMIN role to perform on this portion.
@endcan

推荐阅读