【问题标题】:PHP MVC Call Model in another Model另一个模型中的 PHP MVC 调用模型
【发布时间】:2016-05-09 19:57:08
【问题描述】:

对不起,如果问题已经被问过,但我想知道在另一个模型 MVC 中导入模型是否正确,或者是否最好在每个模型中执行相同的功能?

现在,在我的库文件夹中的模型中,我添加了与控制器中相同的方法:

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();
    }
}

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

提前感谢您的回答。

【问题讨论】:

  • 导入到底是什么意思?延长?
  • 哦,我明白了,等我写一个答案。
  • 模型是一个层,不是一个类

标签: php model-view-controller methods model


【解决方案1】:

我觉得你有点把事情搞混了。

您的控制器负责创建模型并在其上执行方法。您可以将Model 类重命名为BaseModel,并使每个模型都从这个BaseModel 扩展。

至于包含正确文件的问题,我建议你看看自动加载器:http://php.net/manual/de/function.spl-autoload-register.php。乍一看这可能有点令人困惑,但是如果看第一个示例,您将很快了解它的要点:基本上,如果您想创建特定类的对象,php会检查它是否已经知道该类,并且如果没有,它将执行自动加载器(然后尝试包含包含该类的文件)。一旦您配置了自动加载器,您就可以停止关心是否包含正确的文件。

由于自动加载器一开始可能有点混乱,这将是您特定用例中的自动加载器:

spl_autoload_register(function ($model) {
    include '../app/models/' . $model. '.php';
});

在构建/访问模型之前,您需要将此 sn-p 放在某处。其他一切都由 php 完成(它会根据需要自动调用函数,因此调用 spl_autoload_register('Comments_model::comments_list'); 之类的东西根本不起作用:)

现在如果你想从模型中执行一个方法,你可以这样做:

$otherModel = new otherModel();
$otherModel->otherMethod();

不用担心require 或类似的东西,php 会为你做这件事。

【讨论】:

  • 我同意Controller,但问题是,我有一个新闻模型和一个cmets模型,但我需要直接在新闻模型中检索评论方法,所以我一直在寻找一种无需在每个模型中重新键入相同方法两次的方法。感谢您的自动加载,我会更仔细地查看它。
  • 哦,我想理解:spl_autoload_register();如果我想在我的新模型中使用评论方法,我需要这样做: spl_autoload_register('Comments_model::cmets_list');例如,对吗?
  • @Djihell 您可能需要考虑将方法从模型中移到构造函数中。如果你的程序的每个部分都有一个且只有一个目的,我认为最安全的编程方式。模型的目的是保存数据,有时还会格式化它们,例如日期。任何其他逻辑,如访问数据库或类似的,都应移至控制器。
  • 好的,谢谢你的帮助,我试试这个,我回来说这个好不好!
猜你喜欢
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多