繁体   English   中英

从自定义组件调用 Model 到 Joomla 4 controller

[英]Call Model from custom component into Joomla 4 controller

我一直在 Joomla 4.2.5 工作,我需要将我的自定义组件从 Joomla 3 转换为 Joomla 4 兼容。 我正在尝试从我的自定义组件将 model 调用到 Joomla 用户 controller 文件中,但出现错误并且代码未执行。 我尝试了一些代码,但它不起作用。

Joomla 3 从自定义组件调用 model 到用户 controller 的代码:

UserController.php

JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_mycomponent/models', 'MycomponentModel');            
$model = JModelLegacy::getInstance('Mycomponent', 'MycomponentModel');  

这是我的 model 文件代码

组件/Mycomponent/模型/mymodel.php

class MycomponentModelmycomponent extends JModelLegacy
{
    public function somefunction(){
      }
 }

下面是我尝试将上述代码转换为 Joomla 4:

UserController.php

Use Joomla\CMS\MVC\Model\BaseDatabaseModel;

class UserController extends BaseController
{
  public function login()
  {
     login functions....
     
    BaseDatabaseModel::addIncludePath(JPATH_SITE .'/components/com_mycomponent/models');
    $model = BaseDatabaseModel::getInstance('Mycomponent', 'MycomponentModel');
    $model->myfunction($argument); 
  }
}

组件/Mycomponent/模型/mymodel.php

namespace Joomla\Component\mycomponent\Site\Model;
use Joomla\Registry\Registry;
use Joomla\CMS\Component\ComponentHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\MVC\Model\ListModel;

class IbousersModelIbousers extends ListModel 
{
   public function myfunction($argument){
   } 
}

但它不起作用,任何人都可以告诉我哪里出了问题,或者我如何从 Joomla 4 中的另一个组件调用 model?

在 Joomla4 中,您从 MVCFactory 获得 model。

所以相当于:

BaseDatabaseModel::addIncludePath(JPATH_SITE .'/components/com_mycomponent/models');
$model = BaseDatabaseModel::getInstance('Mycomponent', 'MycomponentModel');

将是:

$mvc = Factory::getApplication()->bootComponent('com_mycomponent')->getMVCFactory();
$model = $mvc->createModel('MycomponentModel', 'Site');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM