PHP和笨 - 如何将参数传递到一个模型?(PHP & Codeigniter - how to p

2019-06-26 06:56发布

我使用下面的代码从我的控制器中初始化一个模型:

$this->load->model('model_name');

是否有可能以某种方式修改上述行,使模型构造临危参数? 我想用下面的代码模型构造:

function __construct($param_var) {
   parent::Model();

   $this->$param_var = $param_var; //I'm not even sure this works in PHP..but different issue
}

这将是非常有益的,这样我可以重用我的模型类。 谢谢。

更新:(从其中一个答案,我原来的问题是solved..thanks!)只是为了解释为什么我要做到这一点:这个想法是能够重用模型类。 因此,基本上以得到一个简单的例子,我想能够一个“ORDER_BY”变量传递给模型类,这样我可以在模型中类重用逻辑(和在SQL动态地改变的顺序逐值),而不必创建一个单独的类或一个单独的函数。

这是糟糕的设计? 如果是的话请您解释一下为什么你不会做这样的事,你会怎么做呢?

Answer 1:

我看你这个推理,但我建议在寻找的对象关系映射为你的数据库的需求。 有用户提出的ORM库笨称为DataMapper的 ,我一直在使用最近。 您可以使用表中你的控制器作为对象,它可能是你的问题的一个更好的选择。



Answer 2:

你无法通过参数传递load功能。 你必须做一些事情,如:

$this->load->model('model_name');
$this->model_name->my_constructor('stuff');

在该模型:

function my_constructor($param_var) {
...
}

响应更新:

你可以只通过该ORDER_BY值,当你调用模型功能。 我假设在你的控制器动作,您有类似$this->model_name->get($my_id); 只要你ORDER_BY参数添加到这个功能。 IMO这使得模型的逻辑更灵活的/可重复使用的,因为你正在做的方式,我认为在构造函数将设置为每个函数的ORDER_BY值设置ORDER_BY。



Answer 3:

而不是使用的DataMapper我建议使用IgnitedRecord因为该DataMapper的不再保持更多的在它已经被替换成红宝石



Answer 4:

模型

<?php

/* Load Model core model */
/* BASEPATH = D:\xampp\htdocs\ci_name_project\system\ */
include BASEPATH . 'core\\Model.php';

class User_model extends CI_Model {

    /* Properties */
    private $name;


    /* Constructor parameter overload */
    public function __construct($name) {
        $this->set_name($name);
    }    


    /* Set */
    public function set_name($name) {
        $this->name = $name;
    }


    /* Get */
    public function get_name() {
        return $this->name;
    }

}

控制器

<?php

class User_controller extends CI_Controller {

    public function index() {

        /* Load User_model model */
        /* APPPATH = D:\xampp\htdocs\ci_name_project\application\ */
        include APPPATH . 'models\\User_model.php';

        $name = 'love';

        /* Create $object_user object of User_model class */
        $object_user = new User_model($name);     

        echo $object_user->get_name(); // love

    }

}


文章来源: PHP & Codeigniter - how to pass parameters to a model?