另一个模型中的PHP MVC调用模型

时间:2016-02-01 11:23:12

标签: php model-view-controller methods model

很抱歉,如果问题已经被提出,但我想知道在另一个模型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();
    }
}

但我不确定这样做是否正确,或者是否是最佳方法。

提前感谢您的回答。

1 个答案:

答案 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会为你做这件事。