安装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属性时触发错误,常见诱因有两个:
- 数据库初始化不完整:源码安装时未正确导入
settings配置表的初始数据,Settings::allSettings()查询不到任何记录,返回null/空集合 - 模型方法逻辑错误:
Settings模型的allSettings()方法返回值不符合预期,比如误用get()/all()返回集合,或查询条件错误导致无结果返回
修复方案
按顺序排查处理即可:
- 补全数据库初始数据
找到源码安装包内的SQL初始化文件,检查settings表的初始插入语句是否完整执行。如果缺失,重新执行对应SQL,确保表内存在至少一条完整配置记录,包含menu_display_categories、menu_categories_order、footer_menu_display_categories、footer_menu_categories_order字段的有效值。 - 修正Settings模型方法
定位到Settings模型文件,找到allSettings()静态方法,确保其返回单条配置记录对象,参考正确实现:public static function allSettings() { // 不要用get()/all(),这类方法返回的是集合不是单条模型对象 return self::first(); } - 增加空值兜底逻辑
修改全局视图共享的代码段,在获取配置后增加非空判断,避免配置查询失败时直接报错,参考修改后代码:$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
相关产品推荐
相关产品推荐

