委托@role 和@permission 指令不在blade、laravel 5.6 中呈现

Entrust @role and @permission directives not rendering in blade, laravel 5.6

让我告诉你要点。

  1. 我正在使用 https://github.com/Zizaco/entrust/
  2. 的委托
  3. 我正在使用 multi-auth 即我有 2 个守卫作为 web 用于 users table 和 admin 守卫用于 admins table.
  4. admins table 中有多个用户(也有角色)。
  5. permission中间件有代码

    if (!Auth::guard('admin')->user()->can(explode('|', $permissions)))

  6. 在我的Admin模型中,我使用了use EntrustUserTrait;

  7. 中间件 permissionroutes.php 上工作正常 我面临的唯一问题是如果任何 Admin User 没有权限假设 can-create 那么html 写在那个块中应该隐藏在 blade 文件中。

@permission('can-create') Lorem Ipsum... @endpermission

上面的 blade 指令没有突出显示为 @if 或 @foreach 等

我认为我正在使用 multi-auth,因为 Entrust 默认采用 users table。

考虑到这种情况,请赐教。

是的,我找到了这个问题的解决方案。请完成我使用的步骤。

  1. 运行命令php artisan make:provider EntrustCustomServiceProvider
  2. 转到app/Providers/EntrustCustomServiceProvider.php
  3. Use Auth;并写入boot函数

    public 函数引导() {

    \Blade::directive('permission', function($expression) {
        return "<?php if (Auth::guard('admin')->user()->can({$expression})) : ?>";
    });
    
    \Blade::directive('endpermission', function($expression) {
        return "<?php endif; ?>";
    });
    

    }

  4. config/app.php 的提供者数组中添加此条目:App\Providers\EntrustCustomServiceProvider::class,

还有一件事,许多 phpstorm 用户可能想知道为什么这些指令没有在编辑器中自动填充然后请注意,无论何时我们添加自定义 blade 指令,我们都需要在 phpstorm 的 blade 插件中添加它们编辑。 这是解决方案:

  1. 转到File->settings->php->Blade
  2. 取消选中 Default Settings,转到 Directives 选项卡。
  3. 使用 +
  4. 添加新指令
  5. 输入指令名,这里permission不使用@,勾选has parameter
  6. 在前缀中输入 <?php if (Auth::guard('admin')->user()->can(,在后缀中输入 )):?>
  7. @endpermission 也一样,但不添加任何参数。

我希望这对像我这样的人有帮助:)