很抱歉,如果问题已经被提出,但我想知道在另一个模型MVC中导入模型是否正确,或者是否最好在每个模型中执行相同的功能?
现在,在我的Library文件夹中的Model中,我添加了与Controller中相同的方法:
class Model
{
protected function __construct()
{
$this->db = new Database;
}
public function model($model)
{
require_once '../app/models/' . $model . '.php';
return new $model();
}
}
在我的模型文件中:
class Exemple_model extends Model
{
function __construct ()
{
parent::__construct();
}
public function exemple_function()
{
$otherModel = $this->model('urlAnotherModelFile');
$otherModel->otherMethod();
}
}
但我不确定这样做是否正确,或者是否是最佳方法。
提前感谢您的回答。
答案 0 :(得分:0)
我认为你有点混淆。
您的控制器负责创建模型并对其执行方法。您可以将Model
课程重命名为BaseModel
,并使每个模型从此BaseModel
扩展。
至于包含正确文件的问题,我建议您查看自动加载器:http://php.net/manual/de/function.spl-autoload-register.php。这看起来有点令人困惑,但是如果看第一个例子,你会很快理解它的要点:基本上如果你想创建一个特定类的对象,php检查它是否已经知道该类,以及如果没有,它将执行自动加载器(然后尝试包含包含该类的文件)。一旦配置了自动装带器,就可以停止关注包含正确的文件。
由于自动加载器最初可能有点令人困惑,因此这将是您特定用例中的自动加载器:
spl_autoload_register(function ($model) {
include '../app/models/' . $model. '.php';
});
在构建/访问模型之前,您需要将此代码段放在某个位置。其他一切都是由php完成的(它会根据需要自动调用函数,所以调用像spl_autoload_register('Comments_model::comments_list');
这样的函数根本不起作用:)
现在,如果要从模型执行方法,可以执行以下操作:
$otherModel = new otherModel();
$otherModel->otherMethod();
不用担心require
或类似的问题,php会为你做这件事。