1、 安装:
提到application/config/config.php 文件设置你网站的根 URL;
application/config/database.php 文件设置数据库参数。
如果你想通过隐藏 CodeIgniter 的文件位置来增加安全性,你可以将 system 和 application 目录修改为其他的名字,然后打开主目录下的 index.php 文件将 $system path和 $application folder 两个变量设置为你修改的名字。
CodeIgniter 默认在每个目录下都包含了一个.htaccess文件,用于阻止直接访问,如果你想让 views 目录保持公开,也可以将你的 views 目录移出 application 目录。
2、 URL:
example.com/class/function/ID
1. 第一段表示要调用的控制器 类 ;
2. 第二段表示要调用的类中的 函数 或 方法 ;
3. 第三段以及后面的段代表传给控制器的参数,如ID 或其他任何变量;
移除 URL 中的 index.php:你可以简单的通过一个根目录文件.htaccess 文件再加上一些简单的规则就可以移除 index.php 了。下面是这个文件的一个例子,其中使用了“否定条件” 来排除某些不需要重定向的项目:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
3、 控制器
<?php
class Blog extends CI_Controller {
public function index()
{
echo 'Hello World!';
}
}
文件名必须是大写字母开头,如:’Blog.php’;类名必须以大写字母开头。
example.com/index.php/blog/访问。”index” 方法总是在URI的第二段为空时默认调用。
通过 URI 分段向你的方法传递参数
<?php
class Products extends CI_Controller {
public function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
example.com/index.php/products/shoes/sandals/123
打开application/config/routes.php可以设置默认控制器。$route['default_controller']= 'welcome';
有时候你可能希望某些方法不能被公开访问,要实现这点,只要简单的将方法声明为 private 或 protected ,这样这个方法就不能被 URL 访问到了。
如果你正在构建一个比较大的应用,那么将控制器放到子目录下进行组织可能会方便一点。当使用该功能时,URI 的第一段必须根据实际把子目录名也包含进去。
如果你打算在你的控制器中使用构造函数:
<?php
class Blog extends CI_Controller {
public function __construct()
{
parent::__construct();
// Your own constructor code
}
}
如果你需要在你的类被初始化时设置一些默认值,或者进行一些默认处理,构造函数将很有用。你绝对不要新建一个和类名称一样的方法。如果你这样做了,而且你的控制器又没有一个 construct() 构造函数,那么这个和类名同名的方法Index::index() 将会作为类的构造函数被执行!
4、 视图
视图不是直接被调用的,它必须通过控制器来加载。保存到你的 application/views/ 目录下。
使用下面的方法来加载指定的视图: $this->load->view('name'); 文件的扩展名.php 可以省略,除非你使用了其他的扩展名。
(相当于thinkphp的$this->display()加载视图)
CodeIgniter 可以智能的处理在控制器中多次调用$this->load->view() 方法。如果出现了多次调用,视图会被合并到一起。例如,你可能希望有一个页头视图、一个菜单视图,一个内容视图以及一个页脚视图。
<?php
class Page extends CI_Controller {
public function index()
{
$data['page_title'] = 'Your title';
$this->load->view('header');
$this->load->view('menu');
$this->load->view('content', $data);
$this->load->view('footer');
}
}
如果你喜欢的话,你的视图文件可以放到子目录下组织存储,当你这样做,加载视图时需要包含子目录的名字,例如:
$this->load->view('directory_name/file_name');
通过视图加载方法的第二个参数可以从控制器中动态的向视图传入数据,这个参数可以是一个数组 或者一个 对象 。这里是使用数组的例子:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data); //相当于thinkphp中的$this->assign方法
在页面文件中只需:
<html>
<head>
<title><?php echo$title;?></title>
</head>
<body>
<h1><?php echo$heading;?></h1>
</body>
</html>即可调用。
传入视图文件的数据不仅仅限制为普通的变量,你还可以传入多维数组,这样你就
可以在视图中生成多行了。例如,如果你从数据库中获取数据,一般情况下数据都是
一个多维数组。
<?php
class Blog extends CI_Controller {
public function index()
{
$data['todo_list'] = array('Clean House','Call Mom', 'Run Errands');
$data['title'] = "My Real Title";
$data['heading'] = "My RealHeading";
$this->load->view('blogview', $data);
}
}
<html>
<head>
<title><?php echo$title;?></title>
</head>
<body>
<h1><?php echo$heading;?></h1>
<h3>My Todo List</h3>
<ul>
<?php foreach ($todo_list as$item):?>
<li><?php echo$item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>
注意冒号!替代语法的使用:
<?php echo $variable; ?>可以写成:<?=$variable?>
一些控制结构:
<ul>
<?php foreach ($todo as $item): ?>
<li><?=$item?></li>
<?php endforeach; ?>
</ul>
<?php if ($username === 'sally'): ?>
<h3>Hi Sally</h3>
<?php elseif ($username === 'joe'):?>
<h3>Hi Joe</h3>
<?php else: ?>
<h3>Hi unknown user</h3>
<?php endif; ?>
注意每个分支有冒号,最后用分号。
加载视图方法有一个可选的第三个参数可以让你修改它的默认行为,它让视图作为
字符串返回而不是显示到浏览器中,这在你想对视图数据做某些处理时很有用。如果
你将该参数设置为 TRUE ,该方法返回字符串,默认情况下为 FALSE ,视图将显示
到浏览器:$string = $this->load->view('myfile', '', TRUE);
5、 模型
位于你的 application/models/ 目录下,如果你愿意,也可以在里面创建子目录。
模型类的基本原型如下:
class Model_name extends CI_Model {
public function __construct()
{
parent::__construct();
}
}
类名的第一个字母必须 大写,其余部分小写。文件名和类名应该一致。
加载模型:$this->load->model('model_name'); 如果你的模型位于一个子目录下,要带上。
调用方法:$this->load->model('model_name');
$this->model_name->method();
简单的MVC配合例子:
class Blog_controller extends CI_Controller{
public function blog()
{
$this->load->model('blog');
$data['query'] =$this->blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
如果你发现你有一个模型需要在整个应用程序中使用,你可以让 CodeIgniter 在系
统初始化时自动加载它。打开 application/config/autoload.php 文件,并将该模型
添加到 autoload 数组中。
当模型加载之后,它并不会自动去连接你的数据库。
• 你可以在控制器或模型中使用标准的数据库方法连接数据库。
•你可以设置第三个参数为 TRUE 让模型在加载时自动连接数据库,会使用你的数据库配置文件中的配置:$this->load->model('model_name', '', TRUE);
•你还可以通过第三个参数传一个数据库连接配置:
$config['hostname'] = 'localhost';
$config['username'] = 'myusername';
$config['password'] = 'mypassword';
$config['database'] = 'mydatabase';
$config['dbdriver'] = 'mysqli';
$config['dbprefix'] = '';
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('model_name', '',$config);
6、 辅助函数:
URL 辅助函数 帮助我们创建链接,表单辅助函数 ** 帮助我们创建表单元素,**本文辅助函数 帮助我们处理文本的格式化,Cookie辅助函数帮助我们读取或设置 Cookie ,文件辅助函数帮助我们处理文件。
CodeIgniter 默认不会自己加载辅助函数,所以使用辅助函数的第一步就是加载它。一般情况下,辅助函数位于 system/helpers 或者 application/helpers 目录目录下。
加载:$this->load->helper('url'); 文件名为 url helper.php
加载多个:$this->load->helper(
array('helper1', 'helper2', 'helper3')
);
在autoload配置文件中可配置自动加载某些辅助函数。
7、 使用类库:
所有的系统类库都位于 system/libraries/ 目录下,大多数情况下,在使用之前,你
要先在控制器中初始化它,使用下面的方法:$this->load->library('class_name');
例如,要加载表单验证类库,你可以这样做:$this->load->library('form_validation');
8、 使用驱动器:
在你的控制器中,驱动器为你的类库提供了一种优雅的语法,从而不用将它们拆成很多离散的类。驱动器位于 system/libraries/ 目录,每个驱动器都有一个独立的目录,目录名和驱
动器父类的类名一致,在该目录下还有一个子目录,命名为 drivers,用于存放所有子类的文件。
$this->load->driver('some_parent');
$this->some_parent->some_method();
9、 数据库:
初始化:$this->load->database();将根据你的数据库配置 加载并初始化数据库类
多结果标准查询(对象形式)
$query = $this->db->query('SELECTname, title, email FROM my_table');
foreach ($query->result() as $row)
{
echo $row->title;
echo $row->name;
echo $row->email;
}
echo 'Total Results: ' .$query->num_rows();
多结果标准查询(数组形式)
$query = $this->db->query('SELECTname, title, email FROM my_table');
foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['email'];
}
单结果标准查询(对象形式)
$query = $this->db->query('SELECTname FROM my_table LIMIT 1');
$row = $query->row();
echo $row->name;
单结果标准查询(数组形式)
$query = $this->db->query('SELECTname FROM my_table LIMIT 1');
$row = $query->row_array();
echo $row['name'];
标准插入:
$sql = "INSERT INTO mytable (title,name) VALUES (".$this->db->escape($title).", ".$this->db->escape($name).")";
$this->db->query($sql);
echo $this->db->affected_rows();
使用查询构造器查询数据:简化
$query =$this->db->get('table_name');
foreach ($query->result() as $row)
{
echo$row->title;
}
上面的 get() 函数从给定的表中查询出所有的结果。查询构造器提供了所有数据库操作的快捷函数。
使用查询构造器插入数据
$data = array(
'title' => $title,
'name' => $name,
'date' => $date
);
$this->db->insert('mytable', $data);
10、 辅助函数(略)