解决配置文件中有回调函数,从而导致 PHP artisan config:cache 出错的解决办法
这个问题都已经出现了3次,还没人分享出解决方案,但我在这里找到了办法: 也就是将回调函数写为helper中的函数或者类中的方法就可以了。
- 修改
config/administrator.php
,将下面代码:'permission' => function () { // 只要是能管理内容的用户,就允许访问后台 return Auth::check() && Auth::user()->can('manage_contents'); },
换为:'permission' => 'manage_contents', 然后在
bootstrap/helpers.php
中 新增如下代码:if (!function_exists('manage_contents')) { function manage_contents() { return Auth::check() && Auth::user()->can('manage_contents'); } }
- 接下来测试
php artisan config:cache
,没想到还是失败!好沮丧!睡觉。 -
第二天早上起来,突然想到这条命令是对所有缓存文件进行操作,于是检查了一下其他文件,发现了在
config/administrator/users.php
中还隐藏了3个回调函数,于是如法炮制,将他们全部改为 helper中的函数,如下:if (!function_exists('manage_users')) { function manage_users() { return Auth::check() && Auth::user()->can('manage_users'); } } if (!function_exists('administrator_users_avatar')) { function administrator_users_avatar($avatar, $model) { return empty($avatar) ? 'N/A' : '<img src="'.$avatar.'" width="40">'; } } if (!function_exists('administrator_users_name')) { function administrator_users_name($name, $model) { return '<a href="/users/'.$model->id.'" target=_blank>'.$name.'</a>'; } }
- 再修改
config/administrator/users.php
调用的方式:. . . 'permission' => 'manage_users', . . . 'output' => 'administrator_users_avatar', . . . 'output' => 'administrator_users_name', . . .
- php artisan config:cache
Configuration cache cleared! Configuration cached successfully!
- 在进入后台测试,没问题,Done!
之前也尝试将配置函数写入 helper 或者写成类里静态方法 ,只修改了第一处,最终还是失败,一直被这个问题困扰,非常感谢 @hustnzj 的分享
非常有用,很感谢
求解。。所以
permissions:manage_users
就能调用到helpers.php
里面的manage_users()
函数是么?从而实现该功能? 为什么呐??后面一路报错Call to undefined method Closure::__set_state()
头大。。。或者还有别的解决办法么,后面一大堆函数要往helpers.php里面塞,
非常有用,谢谢,标记一下