我希望有人能在我离开窗户之前帮助我。我在这个上花了几个小时,不知道我做错了什么。
基本上,我已经在CodeIgniter 2.1.2中安装了HMVC,一切正常,但由于某种原因我不能像在标准控制器中那样加载模型。在旧的codeigniter 1.7.1中我可以简单地通过调用$ this-> load-> model('my_model')来使用它,但现在我不能用它!!
我每次尝试加载模型时都会收到此错误:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Special_cart::$db
Filename: core/Model.php
Line Number: 51
我已根据说明逐步安装了它。我在modules文件夹旁边有third_party。在模块中,我有几个模块存储如下:
modules
--boxes
----controller
----models
----views
我在我的代码中调用模块,如下所示:
<?=modules::run('boxes/special_cart/index');?>
我的模块控制器代码如下所示:
class Special_cart extends CI_Controller
{
public function __construct()
{
parent::__construct();
}
public function index()
{
if ($this->session->userdata('cart'))
{
# get product id's and each quantity
$cart_product_list = array_count_values($this->session->userdata('cart'));
# get list of product_id
$product_list = array_keys($cart_product_list);
# get product details
$this->load->model('productmodel');
$this->load->model('stockmodel');
$cart_products = $this->productmodel->cart_get_products_details($product_list);
$final_cart_array = array();
foreach($cart_products as $cart_product){
$product_stock = $this->stockmodel->view_product_stock($cart_product["id"]);
if(empty($product_stock) || $product_stock["UNITS"]<=0)
$cart_product["UNITS"] = 0;
else{
if($cart_product_list[$cart_product["id_web"]]>$product_stock["UNITS"])
$cart_product["UNITS"] = $product_stock["UNITS"];
else{
$cart_product["UNITS"] = $cart_product_list[$cart_product["id_web"]];
}
}
$final_cart_array[] = $cart_product;
}
$refresh_cart_array = array();
foreach($final_cart_array as $cart_product){
for($i=1;$i<=$cart_product["UNITS"];$i++){
$refresh_cart_array[] = $cart_product["id_web"];
}
}
$this->load->view("special_cart",array(
'refresh_cart_array' => $refresh_cart_array,
'final_cart_array' => $final_cart_array
));
} else {
$this->load->view("special_cart",array(
'refresh_cart_array' => NULL,
'final_cart_array' => NULL
));
}
}
}
我已经尝试了在互联网上找到的所有可能的解决方案 - 它们都不起作用.... 我希望你理解我的问题,但如果你需要进一步解释,请问我。有人可以帮忙吗?
答案 0 :(得分:0)
看起来您尝试加载的模型想要连接到数据库,但数据库驱动程序不可用。如果在应用程序中使用数据库查询,为什么不自动加载数据库驱动程序?
只需在application / config / autoload.php文件的“libraries”数组中插入“database”即可。不要忘记将数据库凭据插入application / config / database.php。
$autoload['libraries'] = array('database');
如果您只需要在一个模型中连接数据库,请在尝试访问数据库之前加载它。
$this->load->database();
答案 1 :(得分:0)
尝试使用扩展MX_Controller类(不像你正在做的那样使用CI_Contoller)
根据您在上面评论中所写的内容,我认为您尝试在模块中创建新的DB实例(基于chrises注释)。 在Special_cart
的构造函数上执行此操作因此将当前构造更新为
public function __construct()
{
parent::__construct();
$this->load->database('default');
}
(我是从头顶写的,所以检查方法)
现在确定您的模型中应该有db驱动程序。
关于HMVC
的问题我不认为有任何问题。我现在使用HMVC
一段时间了,我发现它没有任何问题(使用数据库)
答案 2 :(得分:0)
尝试加载模型,说明模块名称,如下所示
$this->load->model('module_name/productmodel');
答案 3 :(得分:0)
Class Models extends MX_Loader{
function getUser($username){
$sql="SELECT * FROM user WHERE username = ? ";
return $this->db->query($sql,array($username))->row();
}
}
您必须使用扩展MX_Loader,因为我不知道是否使用CI_Model数据库核心无法加载到Codeigniter ,,,
答案 4 :(得分:0)
我有同样的问题和错误。我错过了将控制器扩展到MX_Controller。因此,解决方案是将CI_Controller更改为MX_Controller,如下所示:
class Special_cart extends MX_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model('productmodel');
$this->load->model('stockmodel');
}
public function index()
{
if ($this->session->userdata('cart'))
{
# get product id's and each quantity
$cart_product_list = array_count_values($this->session->userdata('cart'));
# get list of product_id
$product_list = array_keys($cart_product_list);
# get product details
$cart_products = $this->productmodel->cart_get_products_details($product_list);
$final_cart_array = array();
foreach($cart_products as $cart_product){
$product_stock = $this->stockmodel->view_product_stock($cart_product["id"]);
if(empty($product_stock) || $product_stock["UNITS"]<=0)
$cart_product["UNITS"] = 0;
else{
if($cart_product_list[$cart_product["id_web"]]>$product_stock["UNITS"])
$cart_product["UNITS"] = $product_stock["UNITS"];
else{
$cart_product["UNITS"] = $cart_product_list[$cart_product["id_web"]];
}
}
$final_cart_array[] = $cart_product;
}
$refresh_cart_array = array();
foreach($final_cart_array as $cart_product){
for($i=1;$i<=$cart_product["UNITS"];$i++){
$refresh_cart_array[] = $cart_product["id_web"];
}
}
$this->load->view("special_cart",array(
'refresh_cart_array' => $refresh_cart_array,
'final_cart_array' => $final_cart_array
));
} else {
$this->load->view("special_cart",array(
'refresh_cart_array' => NULL,
'final_cart_array' => NULL
));
}
}
}
这也在文档中解释 https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/ ,这里引用:
注意:
要使用HMVC功能,例如Modules :: run(),控制器必须 扩展MX_Controller类。仅使用模块化分离, 如果没有HMVC,控制器将扩展CodeIgniter控制器 类。您必须在控制器中使用PHP5样式构造函数。即:
<?php class Xyz extends MX_Controller { function __construct() { parent::__construct(); } }