You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装downGrade商城时报PHP非对象属性menu_display_categories错误

故障说明
  • 触发场景:安装downGrade单供应商数字产品市场源码时抛出运行错误
  • 错误信息:Trying to get property 'menu_display_categories' of non-object
  • 报错触发点:全局视图共享逻辑中,读取系统配置生成导航菜单的代码段

报错截图
报错对应代码位置截图

涉及的原始代码片段:

$admin = Members::adminData();
    View::share('admin', $admin);

    $allsettings = Settings::allSettings();
    View::share('allsettings', $allsettings);

    $allcountry = Settings::allCountry();
    View::share('allcountry', $allcountry);

    $country['country'] = Settings::allCountry();
    View::share('country', $country);

    $demo_mode = 'off'; // on
    View::share('demo_mode', $demo_mode);

    $main_menu['category'] = Category::mainmenuCategoryData($allsettings->menu_display_categories,$allsettings->menu_categories_order);
    View::share('main_menu', $main_menu);

    $footer_menu['category'] = Category::mainmenuCategoryData($allsettings->footer_menu_display_categories,$allsettings->footer_menu_categories_order);
    View::share('footer_menu', $footer_menu);

    $footerpages['pages'] = Pages::footermenuData();
    View::share('footerpages', $footerpages);

    $languages['view'] = Languages::allLanguage();
    View::share('languages', $languages);

    if(!empty(Cookie::get('translate')))
    {
故障根因

报错是因为$allsettings变量不是预期的配置对象,后续读取其menu_display_categories属性时触发错误,常见诱因有两个:

  1. 数据库初始化不完整:源码安装时未正确导入settings配置表的初始数据,Settings::allSettings()查询不到任何记录,返回null/空集合
  2. 模型方法逻辑错误:Settings模型的allSettings()方法返回值不符合预期,比如误用get()/all()返回集合,或查询条件错误导致无结果返回
修复方案

按顺序排查处理即可:

  1. 补全数据库初始数据
    找到源码安装包内的SQL初始化文件,检查settings表的初始插入语句是否完整执行。如果缺失,重新执行对应SQL,确保表内存在至少一条完整配置记录,包含menu_display_categories、menu_categories_order、footer_menu_display_categories、footer_menu_categories_order字段的有效值。
  2. 修正Settings模型方法
    定位到Settings模型文件,找到allSettings()静态方法,确保其返回单条配置记录对象,参考正确实现:
    public static function allSettings()
    {
        // 不要用get()/all(),这类方法返回的是集合不是单条模型对象
        return self::first();
    }
    
  3. 增加空值兜底逻辑
    修改全局视图共享的代码段,在获取配置后增加非空判断,避免配置查询失败时直接报错,参考修改后代码:
    $admin = Members::adminData();
    View::share('admin', $admin);
    
    $allsettings = Settings::allSettings();
    // 配置查询失败时初始化默认配置对象兜底
    if (!is_object($allsettings)) {
        $allsettings = (object)[
            'menu_display_categories' => 0,
            'menu_categories_order' => 'sort',
            'footer_menu_display_categories' => 0,
            'footer_menu_categories_order' => 'sort'
        ];
    }
    View::share('allsettings', $allsettings);
    
    $allcountry = Settings::allCountry();
    View::share('allcountry', $allcountry);
    
    $country['country'] = Settings::allCountry();
    View::share('country', $country);
    
    $demo_mode = 'off';
    View::share('demo_mode', $demo_mode);
    
    $main_menu['category'] = Category::mainmenuCategoryData($allsettings->menu_display_categories,$allsettings->menu_categories_order);
    View::share('main_menu', $main_menu);
    
    $footer_menu['category'] = Category::mainmenuCategoryData($allsettings->footer_menu_display_categories,$allsettings->footer_menu_categories_order);
    View::share('footer_menu', $footer_menu);
    
    $footerpages['pages'] = Pages::footermenuData();
    View::share('footerpages', $footerpages);
    
    $languages['view'] = Languages::allLanguage();
    View::share('languages', $languages);
    
    if(!empty(Cookie::get('translate')))
    {
    

内容的提问来源于stack exchange,提问作者MUTEX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:36:18