Zizaco /委托在刀片中使用@permission抛出错误

时间:2016-10-20 13:58:46

标签: php laravel rbac

我使用包Zizaco / entrust进行基于角色的访问控制(RBAC)。

用户角色在视图中使用@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)

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

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

您可以在下面找到您的刀片指令代码

\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

有关详细信息,请查看以下链接

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

注意:在Laravel的早期版本中,使用指令方法注册自定义Blade指令时,传递给指令回调的$表达式包含最外侧的括号。在Laravel 5.3中,这些最外面的括号不包含在传递给指令回调的表达式中。请务必查看Blade扩展文档,并验证自定义Blade指令是否仍能正常运行。