我正在使用CodeIgniter 3,我在本网站上看到了类似的问题,并尝试了所提供解决方案的每一种排列都无济于事。
我正在尝试使用CodeIgniter通过cli创建一个表。但这导致了一个我似乎无法弄清楚的错误,非常感谢任何帮助!
型号:
<?php
class App_model extends CI_Model {
public function __construct(){
parent::__construct();
$this->load->database();
}
public function create_table(){
$this->drop();
$sql='CREATE TABLE app (
id int(11) NOT NULL AUTO_INCREMENT,
text text NOT NULL,
PRIMARY KEY (id)
);';
$this->db->query($sql);
}
public function drop(){
$this->db->query('DROP TABLE app');
}
}
?>
控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class App extends CI_Controller {
public function __contruct(){
parent::__construct();
$this->load->model('App_model');
}
public function test(){
$this->App_model->create_table();
}
}
?>
终端:
asergey91:~/workspace $ php index.php App test
A PHP Error was encountered
Severity: Notice
Message: Undefined property: App::$App_model
Filename: /home/ubuntu/workspace/application/controllers/App.php
Line Number: 10
Backtrace:
File: /home/ubuntu/workspace/application/controllers/App.php
Line: 10
Function: _error_handler
File: /home/ubuntu/workspace/index.php
Line: 292
Function: require_once
Fatal error: Call to a member function create_table() on a non-object in /home/ubuntu/workspace/application/controllers/App.php on line 10
Call Stack:
0.0003 255192 1. {main}() /home/ubuntu/workspace/index.php:0
0.0010 317824 2. require_once('/home/ubuntu/workspace/system/core/CodeIgniter.php') /home/ubuntu/workspace/index.php:292
0.0171 1549776 3. call_user_func_array:{/home/ubuntu/workspace/system/core/CodeIgniter.php:514}() /home/ubuntu/workspace/system/core/CodeIgniter.php:514
0.0171 1550040 4. App->test() /home/ubuntu/workspace/system/core/CodeIgniter.php:514
A PHP Error was encountered
Severity: Error
Message: Call to a member function create_table() on a non-object
Filename: /home/ubuntu/workspace/application/controllers/App.php
Line Number: 10
Backtrace:
答案 0 :(得分:2)
如评论中所述:您的控制器的文件名必须以大写字母开头。在你的情况下,App_model.php。 见http://codeigniter.com/userguide3/changelog.html
更改了filenaming约定(类文件名现在必须是Ucfirst 以及小写的其他所有内容。)
所以将app_model.php
更改为App_model.php
编辑:
此外,在您的控制器中,观看大写字母:$this->load->model('app_model')
和$this->app_model->...
。除非文件名在文件名中,否则请勿使用任何大写字母。
删除关闭的php标签。
最后,您有一个拼写错误function __contruct
而不是function __construct()
答案 1 :(得分:2)
在Codignitor 3
中,您需要为您的文件使用首字母大写,如:
app_model.php
应该是:
App_model.php