我正在尝试遵循教程here,这只是一个从数据库中提取数据的简单helloworld。
我正在使用CI 3.0.6。
之前我从未使用过codeigniter,但我想尝试一个框架。
无论如何,我认为我正确地遵循了教程(我确实认为教程使用稍微旧版本的codeigniter,因为一些路径有点不同)但是我无法让它工作,它给了我错误{{ 1}}
我对此有几个问题。
教程告诉我使用模型,但是模型?
我怎样才能使这个工作?如果我能够正常工作,我毫不怀疑我可以将它作为一种学习经验来扩展我的项目。
我的代码: helloworld.php(Controller @ BASEDIR / application / controllers)_:
The page you requested was not found.
helloworld_model.php(Model @ BASEDIR / application / models):
<?php
class Helloworld extends Controller{
function index()
{
$this->load->model('helloworld_model');
$data['result'] = $this->helloworld_model-><span class="sql">getData</span>();
$data['page_title'] = "CI Hello World App!";
$this->load->view('helloworld_view',$data);
}
}
?>
helloworld_view(查看@ BASEDIR / application / views):
<?php
class Helloworld_model extends Model {
function Helloworld_model()
{
// Call the Model constructor
parent::Model();
}
function getData()
{
//Query the data table for every record and row
$query = $this->db->get('data');
if ($query->num_rows() > 0)
{
//show_error('Database is empty!');
}else{
return $query->result();
}
}
}
?>
我的数据库信息:
<html>
<head>
<title><?=$page_title?></title>
</head>
<body>
<?php foreach($result as $row):?>
<h3><?=$row->title?></h3>
<p><?=$row->text?></p>
<br />
<?php endforeach;?>
</body>
</html>
&安培;我的自动加载:
$db['default'] = array(
'dsn' => '',
'hostname' => 'private',
'username' => 'private',
'password' => 'private',
'database' => 'database',
'dbdriver' => 'mysql';
'dbprefix' => 'va',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
我试图访问http://myurl.com/dev/index.php/helloworld/
来访问该页面/ dev /是我的安装目录。
同样,我以前从未使用过框架,所以这个问题可能很容易解决。
答案 0 :(得分:2)
如果您完全遵循该教程,那么您需要在url中访问不带index.php的页面。
也可以使用PHP5构造函数进行更改:
function Helloworld_model()
{
// Call the Model constructor
parent::Model();
}
要:
function __construct()
{
// Call the Model constructor
parent::__construct();
}
这也没有意义:
if ($query->num_rows() > 0)
{
//show_error('Database is empty!');
}
else
{
return $query->result();
}
if / else里面的代码应该被切换。如果返回的行数大于0,则返回结果,否则显示数据库为空的错误。
控制器中的最后一件事:
$data['result'] = $this->helloworld_model-><span class="sql">getData</span>();
仅将数据库结果存储到数据变量,将其传递给视图并在视图中包装数据的任何元素。
$data['result'] = $this->helloworld_model->getData();
答案 1 :(得分:1)
如果您阅读文档控制器 enter link description here
你可以看到在application / controller / Name.php中,控制器的名称需要大写,你需要在类中(请记住扩展CI_Controller)
<?php
class Controller_name extends CI_Controller {
public function view($page = 'home')
{
}
}
对模型的调用是正确的$this->load->model('helloworld_model');
m但请记住,在applicatoin / models / Model_name.php中也需要大写,并且需要使用insend(记住扩展CI_Model)
<?php
class Blog_model extends CI_Model {
public function __construct()
{
// Call the CI_Model constructor
parent::__construct();
}
是的,您需要自动加载数据库,但在您的数据库配置(application / config / database.php)中将dbdriver更改为 mysqli