繁体   English   中英

PHP&Codeigniter - 如何将参数传递给模型?

[英]PHP & Codeigniter - how to pass parameters to a model?

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

$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
}

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

更新:(从其中一个答案,我原来的问题解决了......谢谢!)只是为了解释我为什么要这样做:想法是能够重用模型类。 所以基本上给出一个简单的例子我希望能够将“order_by”变量传递给模型类,这样我就可以重用模型类中的逻辑(并动态地更改sql中的order-by值)而不必创建单独的类或单独的函数。

这是一个糟糕的设计? 如果是这样,请解释为什么你不会做这样的事情以及你将如何做呢?

您无法通过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值。

我看到了你的理由,但我可以建议你查看对象关系映射以满足你的数据库需求。 CodeIgniter有一个用户自制的ORM库,叫做DataMapper ,我最近一直在使用它。 您可以将控制器中的表用作对象,它可能更适合您的问题。

而不是使用DataMapper我建议使用IgnitedRecord,因为DataMapper不再被维护,它已被替换为Ruby

模型中

<?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

    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM