【问题标题】:Why can't I pass a variable to Model's constructor in Code Igniter?为什么我不能将变量传递给 Codeigniter 中的模型构造函数?
【发布时间】:2011-11-09 17:49:52
【问题描述】:

在 Code Igniter 中似乎不可能将变量传递给模型的构造函数。也许我在 MVC 或 Code Igniter 中遗漏了一些东西,但我不明白是什么。

就我而言,我应该使用库而不是 Model 吗? (库实际上接受参数)

其实我的代码是这样的,我觉得有点奇怪:

控制器:

class User extends CI_Controller {
    public function user($user_id) {
        $this->load->model('user');
        $this->user->setId($user_id);

        $data['username'] = $this->user->getName();     
        // Isn't it a bit strange ? I can load the class User even if the User doesn't mean anything ?
    }
}

型号:

class User extends CI_Model {
    private $id;
    private $name;

    public function setId($id) {
        $this->id = $id;
        // Retrieve data from DB...
        $this->name = $retrieved_data['name'];
    }

    public function getName() {
        return $this->name;
    }
}

【问题讨论】:

  • 当您将模型类重命名为 user_model 时会发生什么?
  • 完全一样。事实上,问题在于 Code Igniter 中的 Model 不接受构造函数的变量 (codeigniter.com/user_guide/general/models.html)。我不知道这是否正常,或者我只是在 CodeIgniter Logic 中遗漏了一些东西(或者可能是 MVC Logic?Model 不应该在其构造函数中接受任何变量吗?)
  • 它应该接受变量......嗯,你得到什么错误?我会为你重写这个。
  • 在 PHP 中不能有两个相同的类名,即使您使用的是 CodeIgniter。我很惊讶你甚至可以加载模型。在这段代码中,您实际上也不是“将变量传递给模型的构造函数”。
  • @Madmartigan 你是对的,对不起。我简化了stackoverflow的代码,但在我的“真实”代码中,它是用户s和用户,这就是它工作的原因:)

标签: php oop codeigniter codeigniter-2


【解决方案1】:

试试这个:

控制器:

class User extends CI_Controller {

    public function user($user_id) {
        $this->load->model('user_model');

        $data['username'] = $this->user_model->getName($user_id);     
    }
}

型号:

class User_model extends CI_Model {

    public function getName($user_id) {
        //Retrieve data from DB using the $user_id variable...
        return $retrieved_data['name'];
    }
}

似乎是一种更合乎逻辑且更快的方法。不确定它是否符合您的其余代码,但它可能会帮助您追踪错误。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多