解决配置文件中有回调函数,从而导致 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!
日拱一卒
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 4

之前也尝试将配置函数写入 helper 或者写成类里静态方法 ,只修改了第一处,最终还是失败,一直被这个问题困扰,非常感谢 @hustnzj 的分享

6年前 评论

非常有用,很感谢

6年前 评论

求解。。所以 permissions:manage_users就能调用到helpers.php里面的manage_users()函数是么?从而实现该功能? 为什么呐??后面一路报错 Call to undefined method Closure::__set_state() 头大。。。
或者还有别的解决办法么,后面一大堆函数要往helpers.php里面塞,

6年前 评论

非常有用,谢谢,标记一下

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!