我正在使用夜间版本准备与Joomla 4一起运行的模块之一。我遇到了3.9版没有的问题。我在文章模型上调用函数setState并得到以下异常:
“在布尔值上调用成员函数setState()”
$ appParams不为空或任何其他内容。下面还列出了代码,标记了发生异常的行。
// Get an instance of the generic articles model
$model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true)); // This returns false instead of the model!
// Set application parameters in model
$app = JFactory::getApplication();
$appParams = $app->getParams();
$model->setState('params', $appParams);
// Set the filters based on the module params
$model->setState('filter.published', 1);
$model->setState('filter.article_id', $articleIds);
$model->setState('filter.category_id', $params['eventlist_categories']);
我是否监督了一些过时的功能?感谢您的帮助!
---编辑---
我发现JModelLegacy :: getInstance()返回false-因此可能有一种新的方法来在Joomla中获取文章模型! 4,对吧?
答案 0 :(得分:1)
很抱歉,之前我给您提供了一个示例,我只是偶然地在Joomla 3.9中进行了测试,后来我才意识到在Joomla 4中它不再有效。所以现在这是我刚刚测试的工作版本在Joomla 4中:
$model = $app->bootComponent('com_content')->getMVCFactory()->createModel('Articles', 'Administrator', ['ignore_request' => true]);
显然,根据我们要使用的模型,“管理员”可以更改为“站点”。
在Joomla 4中,似乎必须使用MVCFactoryInterface来创建和使用模型实例。