Zizaco / entrust 在 blade 中使用@permission 抛出错误

Zizaco / entrust throws error with @permission in blade

我正在为 role-base 访问控制 (RBAC) 使用软件包 Zizaco / entrust

用户角色使用 @permission 签入视图,同样,

@permission('role-create')
    <a class="btn btn-success" href="{{ route('roles.create') }}"> Create New Role</a>
@endpermission

等于,

<?php if (\Entrust::can'role-create') : ?>
    <a class="btn btn-success" href="<?php echo route('roles.create'); ?>"> Create New Role</a>
<?php endif; // Entrust::can ?>

但它抛出以下错误:

Parse error: syntax error, unexpected ''role-create'' (T_CONSTANT_ENCAPSED_STRING) (View: /var/www/rbac/resources/views/roles/index.blade.php)

这是包中的错误,但您可以在您的项目中修复它 转到 vendors 目录,找到一个委托目录,然后从那里转到 src/Entrusts/EntrustServiceProvider.php

您可以找到如下所示的 blade 指令代码

\Blade::directive('permission', function($expression) {
    return "<?php if (\Entrust::can({$expression}) : ?>";
 });

您看到缺少一个起始括号,可以像下面这样简单地添加该起始括号

\Blade::directive('permission', function($expression) {
     return "<?php if (\Entrust::can({$expression})) : ?>";
 });

或使用两个括号。像这样: @permission(('role-edit')) @endpermission

更多信息请查看下方link

https://github.com/Zizaco/entrust/issues/657

注意: 在 Laravel 的早期版本中,当使用指令方法注册自定义 Blade 指令时,传递给指令回调的 $expression 包含outer-most 括号。在 Laravel 5.3 中,这些 outer-most 括号不包含在传递给指令回调的表达式中。请务必查看 Blade 扩展文档并确认您的自定义 Blade 指令仍在正常工作。

只需将您的权限名称上的小括号加倍即可解决我的问题

@permission(('role-create'))
    <a class="btn btn-success" href="{{ route('roles.create') }}"> Create New       Role</a>
@endpermission