[英]How does codeigniter know how to pass parameters from controller to the model
[英]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.