好。所以我一直在我自己错误的地方。我不是那么新的PHP,但我也不是专家,虽然我越来越习惯于OOP。我最近进入了CodeIgniter 3.我喜欢它,我使用它,它在开始时很容易掌握。
但是,我处于学习阶段,我无法使用Model从数据库成功传递动态数据。
就像一个FYI:我使用MY_Controller
作为我的基本控制器,并设置了一个$ data对象来传递应用程序范围内的变量。我知道我的问题不是由于MY_Controller
的使用,因为当我使用静态$this->data['KEY'] = 'VALUE';
或$this->data array('KEY' => 'VALUE');
时,我的变量会传递到我的视图中。所以MY_Controller
是有效的。
我的问题在于创建Settings_model
。其唯一目的是从数据库表settings
中获取数据,并推断某些数据列,例如:/ an:应用程序标题,背景颜色等。
因此。关于我的问题,以及我试图解决这个问题。
首先,这是我的MY_Controller
:
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
public $data;
public function __construct() {
parent::__construct();
$this->data = array(
'app_title' => $this->settings_model->get_title('$title'),
'meta_author' => APP_AUTHOR
);
}
}
这是我的Settings_model:
defined('BASEPATH') OR exit('No direct script access allowed');
class Settings_model extends CI_Model
{
public $title = '';
public function __construct() {
$this->load->database();
}
public function get_title($title) {
$this->db->select('app_title');
$this->db->from->('settings');
$this->db-where('app_title', $title);
return $this->db->get()->row('app_title');
}
}
我的问题
使用上面的sytnax时。我能够在浏览器中看到我的应用程序输出。一切都正确呈现,我在MY_Controller
中分配的所有静态变量都有效。一切都很好......除了$app_title
变量(在我的视图中,并在MY_Controller
中分配)不会像模型指示的那样从数据库加载数据。同时不会产生任何错误,警告或通知。
我尝试了什么 男人,我告诉你,我已经尝试了一切。我已经尝试直接将查询插入MY_Controller而不使用模型(我知道这不是适当的MVC,但我想尝试),如下所示:
MY_Controller使用Straigh Query,无模型
$this->data = array(
'app_title' => $this->db->query('GET app_title FROM settings'),
'meta_author' => APP_AUTHOR
);
有一次我到了某个地方,错误/通知明智的是当我改变Settings_Model
时,就像这样:
更改设置模型
defined('BASEPATH') OR exit('No direct script access allowed');
class Settings_model extends CI_Model
{
public $title = '';
public function __construct() {
$this->load->database();
}
public function get_title($title) {
$this->db->select('app_title');
$this->db->from->('settings');
$this->db-where('app_title', $title);
// Before it was this:
return $this->db->get->row('app-title');
// But I changed it to this
return $this->db->get()->row()->app_title;
}
}
但上面的语法给了我这个非对象错误的图像中的错误
我不知道我做错了什么。
现在问题
return $this->db->get()->row('app_title');
它会在浏览器中显示我的所有应用程序输出,但是在调用$app_title
变量的任何地方,它本身都不会显示任何值数据库,通过MY_Controller和Settings_model?return $this->db->get()->row()->app_title;
会在链接到上面的图片中产生Trying to get property of Non Object
错误?非常感谢和欢迎任何和所有帮助。我感谢大家的意见。
编辑1:感谢@ Mirceac21提问。我是autoloading
settings_model
中的config/autoload.php
。{/ p>
编辑2:我现在已将var $data
切换为public $data
MY_Controller
,因为@ Mirceac21建议。仍然是同样的错误,但他没有在那里使用var
是正确的。
答案 0 :(得分:0)
好的,所以我明白了。在@ Mirceac21的帮助下。我将var $data
更改为public $data
中的MY_Controller
。
然后在Settings_model
中,我取出了WHERE
条款并且它有效。以下是新的工作代码:
<强> MY_Controller 强>
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
// $data object used for $this->data
public $data;
public function __construct() {
parent::__construct();
/*
* The $data array('KEY' => 'VALUE') variable sets are used
* in other Controller Classes that extend MY_Controller.
*/
$this->data = array(
'app_title' => $this->settings_model->get_title('$title'),
'meta_author' => APP_AUTHOR
);
}
}
然后在Settings_model
我做了以下更改,请删除->where('app-title', $title);
。像这样:
defined('BASEPATH') OR exit('No direct script access allowed');
class Settings_model extends CI_Model
{
public $title = '';
public function __construct() {
$this->load->database();
}
public function get_title($title) {
$this->db->select('app_title');
$this->db->from->('settings');
// I removed the following where->(); and it now loads the dynamic data
// $this->db-where('app_title', $title);
return $this->db->get()->row('app_title');
}
}
现在一切都按计划进行。我知道这是一个简单而愚蠢的事情,因为缺乏更好的词汇。感谢@ Mirceac21的输入。