CI学习三
时间:2009-07-22 来源:hkebao
靠!NND我一开始用IIS配置的时候总是运行的时候
require_once BASEPATH.'codeigniter/CodeIgniter'.EXT; 提示找不到文件MD
后来我在Apache下面正常运行了!哈哈看来IIS的东西不能用呀!不靠谱!还是开源的东西好!
CodeIgniter URL
example.com/class/function/ID
- 第一段表示调用控制器类。
- 第二段表示调用类中的函数或方法。
- 第三及更多的段表示的是传递给控制器的参数,如 ID 或其他各种变量。
其实这个概念跟我之前的所谓单口模式的想法是一样的!就是说全部的应用请求首先是丢到一个中央控制器了然后会有一些参数是这个中央控制器是传给谁。及其方法是什么!
添加 URL 后缀:
通过设置 config/config.php 文件,你可以为 CodeIgniter 生成的 URL 添加一个指定的文件后缀。举例来说,如果 URL 是这样的:
example.com/index.php/products/view/shoes
你可以随意添加一个后缀,例如 .html,使其显示为:
example.com/index.php/products/view/shoes.html
(icebird注:英文中由于参数可直接看懂其含义,并未说明应修改哪个参数,在这里应修改$config['url_suffix']这个参数。)
设置我们的配置项即可处理这个问题的!
启用查询字符串
在一些情况下你需要在 URL 中使用查询字符串:
index.php?c=products&m=view&id=345
CodeIgniter 支持这个功能是可选的,可以在 application/config.php 文件中进行设置。如果你打开 config 文件可以看到如下内容:
$config['enable_query_strings'] = FALSE;
$config['controller_trigger'] = 'c';
$config['function_trigger'] = 'm';
如果你将 enable_query_strings 更改为 TRUE ,那么这个功能就被激活了。此时,你就可以通过关键字来调用需要的控制器和方法了:
index.php?c=controller&m=method
请注意:如果你使用查询字符串,那么就必须使用自己建立的 URL ,而且不能使用URL 辅助函数(或是其他生成 URL 的辅助函数,例如表单辅助函数),因为这些都是根据分段 URL 设计的。
表示是否将你的查询字符串的功能打开的!如果是打开的话就表示能够这样调用了
控制器:
简而言之,一个控制器就是一个类文件,是以一种能够和 URI 关联在一起的方式来命名的。
比如说你看JAVA中的一个控制器其实就是一个Servlets类。
index.php?c=controller&m=method 其中的C就表示的是一个控制器了!
example.com/class/function/ID 第一个CLASS表示的是一个控制器类了!
example.com/index.php/blog/
在上面的例子中,CodeIgniter 将尝试寻找并装载一个名为 blog.php 的控制器。
当控制器的名字匹配 URI 的第一段时,它将被装载。
注意:类名必须以大写字母开头。
就是说我们的控制器类的话其命名是大写的!
http://localhost/CI/index.php/blog/test 表示的是调用了blog控制器中的test方法
example.com/index.php/products/shoes/sandals/123 #表示的是后面两个参数将当成函数体参数所接收进来的了!
URI 的第3和第4部分会被传递给你的方法(“sandals” 和 “123”):
<?php
class Products extends Controller {
function shoes($sandals, $id)
{
echo $sandals;
echo $id;
}
}
?>
重新定义方法的调用规则
本来的话我们的URL中第二段表示的是方法体的名称的。现在如果你想要改变这样的策略的话就要考虑下如何去修改了:
如上所述,URI 的第二片段决定会调用控制器中的哪个方法。CodeIgniter 允许你使用 _remap() 方法来废除这种规则:
function _remap()
{
// Some code here...
}
注意:如果你的控制器中包含一个名为 _remap() 的方法,那么不管你的 URI 中包含什么,它总会被忽略掉。这个方法会废除掉由 URI 片段来决定哪个方法被调用的规则,允许你重新定义调用方法的规则(方法的路由规则)。
被重新定义的方法调用方式(一般是 URI 中的第二片段)将作为一个参数传递给 _remap() :
function _remap($method) #$method的话是URL中第二个参数值
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
#以下示例通过测试!就是说如果我输入:http://localhost/CI/index.php/blog/index的话就
直接调用了index方法了。如果我输入的是:http://localhost/CI/index.php/blog/t
的话就会去调用default_method()方法了。而这个方法会输出HelloS
function _remap($method)
{
if ($method == "index") {
$this->$method();
}else{
$this->default_method();
}
}
function default_method()
{
echo "HelloS";
}
处理输出
注意: 如果你的控制器包含一个 _output() 方法,那么它将总是被调用,而不是直接输出最终的数据。这个方法的第一个参数即为最终的输出。
例如:
function _output($output)
{
echo $output;
}
私有方法 (所谓的私有化的意思就是说对外是看不到的即我们的URL地址栏目中输入这个控制器/方法 是不能正常打开的!)
我们可以在控制器文件夹controllers的此目录下面新建立一个子文件夹
比如说我新建立了一个products文件夹了!
那我在这个子文件夹此目录下面又新建立了一个控制器类shows.shop
里面的代码是:
class Shoes extends Controller {
function Shoes()
{
parent::Controller();
}
function show($a)
{
echo $a;
}
}
那我这段URI的话会显现出来的值是:http://localhost/CI/index.php/products/shoes/show/123
123
其中的products表示的是我们的子文件夹。Shoes表示的是子文件夹中的控制器类。Show表示的是这个子控制器中的方法了123表示的是这个方法体的参数值了!
视图
视图从不直接调用,必须被一个控制器来调用。
视图层的代码我们是写到views文件夹目录下面的。
然后我们的视图层中的方法代码是这样来渲染的:$this->load->view(“视图文件名”)
相当于我们的Django 中将全部的template放到一个目录下面去的。自动会加载到此模板进来!
如果你想让文件更有组织性,你也可以用子文件夹来存储你的视图文件.. 当你在载入视图时,必须加上子文件夹的名字. 示例如下:
$this->load->view('folder_name/file_name');
Views/建立我们的子文件夹目录。方便组织代码结构的!
我们的我们的视图函数是将PHP的代码写入。然后在我们的控制器中生成即可
视图的代码:
<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
控制器的代码:
function index()
{
$date = array(
"title"=>"hello", #将数据生成好
"heading"=>"ww"
);
$this->load->view("blogview",$date); #加载视图同时渲染模板
}
还可以在PHP中的模板系统中写逻辑语句的!
模型
什么是模型?
模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。
模型类文件存放在 application/models/ 文件夹。 如果你愿意,可以在里面建立子文件夹。
模型可以在 controller 中被引用。就像这样:
$this->load->model('Model_name'); #控制器中载入模型代码!
$this->load->model('blog/queries'); 子目录的时候!
$this->load->model('Model_name');#加载模型
$this->Model_name->function(); #调用模型中方法
如果你想给你的model指派一个不同的对象名,可以在加载模型函数中指定第二个参数:
$this->load->model('Model_name', 'fubar');#别名的含义!
$this->fubar->function();
连接到数据库
您可以手动设定第三个参数来载入您的自定义数据库配置: $config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);
辅助函数(helpers)
是帮助我们完成特定任务的函数。每个辅助函数文件仅仅是一些函数的集合。
CodeIgniter 默认是没有载入辅助函数文件的,所以如果你想用辅助函数,就必须先载入它。一旦被载入,辅助函数将全局可用(globally available),你可以在 controller 和 views 中使用它们。{载入之后就能够使用了!}
辅助函数文件一般保存在 system/helpers 或 system/application/helpers 文件夹中。
载入辅助函数
载入辅助函数是非常简单的:
$this->load->helper('name');
辅助函数可以在你的控制器(controller)的任何地方被载入,甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们,以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。
$this->load->helper( array('helper1', 'helper2', 'helper3') );载入多个辅助
如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数来实现。
你需要什么辅助函数就去配置下这个即可!
例如,要使用anchor() 函数来建立一个链接,在视图(View)文件里面你可以这样做:
<?php echo anchor('blog/comments', 'Click Here');?>
建立好这个辅助函数先!然后就能够应用了!
插件
它们最主要的区别在于插件文件一般只有一个函数,而辅助函数文件里面通常是一系列函数。辅助函数被看作系统核心的一部分,而插件通常是网友制作和分享的。
使用 CodeIgniter 类库