■URI
localhost/project/class/function/id
project:项目名
class:调用控制器的类
function:类中的方法
id:传递的参数
默认情况下index.php被包含在url中
■控制层
把文件放在application/controllers/下
控制层类名必须大写 必须继承 Controller 并且在构造函数中加入parent::Controller();
//demo: class Welcome extends Controller { function Welcome() { parent::Controller(); } function index() { $this->load->view('welcome_message'); echo "Hello World"; } function doll(){ echo "Bei bei huan ying ni"; } function say($name,$words){ echo $name.$words; } function say2($name="beibei ",$words="huan yi ni "){ echo $name.$words; } }
可通过上述uri的方法访问类或其中的方法 默认情况下访问index方法
localhost/project/Welcome/ //Hello World
或者
localhost/project/Welcome/doll //Bei bei huan ying ni
如果要访问say方法可以如下
localhost/project/Welcome/say/leon/killer
那么你将会看到页面已经输出我们传递的参数 //leonkiller
□p.s:调用say方法必须给定两个参数.否则会报错.
当然也可以按照say2的方式给say的参数列表设置默认值以省略参数
当你的网站没有设置 URI 或者直接从根目录访问的时候,CodeIgniter 会加载默认控制器。打开 application/config/routes.php 文件来设置默认控制器:
$route['default_controller'] = 'Welcome';
这里的 Welcome 就是你希望使用的控制器的名字。如果此时你不指定任何 URI 片段来访问你的主页就会看到默认的“Hello World”信息。
注意:如果你的控制器中包含一个名为 _remap() 的方法,那么不管你的 URI 中包含什么,它总会被忽略掉。这个方法会废除掉由 URI 片段来决定哪个方法被调用的规则,允许你重新定义调用方法的规则(方法的路由规则)。
function _remap($method) { if ($method == 'c') { $this->comments(); } else { $this->$method(); } }
你可以这样理解上面的方法:当 $method 等于你定义的参数时程序执行一个特殊的操作,这里可以灵活运用。
如果参数等于 c 就调用 comments,否则就调用用户输入的方法
□P.S:其实就是一个拦截器
注意: 如果你的控制器包含一个 _output() 方法,那么它将总是被调用,而不是直接输出最终的数据。这个方法类似于OO里的析构函数,不管你调用任何方法这个方法总是会被执行。
function _output()
{
echo 'I am here';
}
定义私有方法(Private)
在某些情况下,你可能想要隐藏一些方法使之无法对外查阅。将方法私有化很简单,只要在方法名字前面加一个下划线(“_”)做前缀就无法通过 URL 访问到了。
function _utility()
{
echo "I'm the world!";
}
此时如果你想通过
localhost/project/Welcome/_utility 来访问将会看到Object not found提示
如果你想把你创建的控制器放置在自己创建的文件夹下请在 controllers下创建属于你的文件夹
注意:如果你要使用某个子文件夹下的功能,就要保证 URI 的第一个片段是用于描述这个文件夹的
例如:如果你要调用的类在名为mycontrol的文件夹下 则访问时要采用如下方式
localhost/project/mycontrol/MyClass/method1
不要忘记让你的类名首字母大写和继承Controller类 并且在构造函数中加入parent::Controller();
你的每个子文件夹中需要包含一个默认的控制器,这样如果 URI 中只有子文件夹而没有具体功能的时候它将被调用。
■视图
要放置在application/views文件夹下
如果要载入视图文件 可以在控制层调用如下函数 (.php扩展名可以省略)
$this->load->view("name");
注意:调用视图前页面不要有输出即存在 print/echo 否则视图无法正确显示
输出语句可以放置在调用之后,此时将在页面优先输出控制层的输出内容
上面的函数可以多次调用,如果多次调用那么他们将会被合并到一起
例如,你可能希望有一个标题视图、一个菜单视图、一个内容视图、和一个页脚视图。他们看起来应该是这样:
<?php
class Page extends Controller {
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("folder_name/name");
给视图添加动态数据 数组、对象
$data=array("key1"=>"value1","key2"=>"value");
$this->load-view("myview",$data);
p.s:当加载多个视图的时候之需要在第一个视图传入数据就可以了
在视图层输出添加的数据
<?php print $key1; ?>
·获取视图的数据
如果你不想直接输出视图而尽享得到视图的内容你可以采用如下函数来获取视图的数据
$this->load->view("myview",$data,true);
第三个参数表示不输出视图,而只是将结果返回给一个变量
■模型--数据库操作类---(-_-||||)
模型文件应该存放在application/models/ 下 当然 你也可以再这里建立子文件夹
注意:模型类必须继承Model父类 构造方法必须调用父类构造方法 类名首字母要大写 文件名应该是类名的小写版
例如
mymodel.php
class MyModel extends Model{
function __construct(){
parent::Model();
}
}
载入模型
$this->load->model('MyModel');
如果你的模型文件在自己建立的文件夹下则需要加上相应的路径名
$this->load->model('myfolder/MyModel');
模型一旦载入你便可以采用如下方式使用
$this->MyModel->method1();
如果你想给载入的model分配一个别名 那么你可以采用如下方式
$this->load->model("MyModel","nick");
$this->nick->method1();
--------------------------------------------------------
这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
·连接到数据库
若要模型载入时自动连接数据库则要调用如下函数
$this->load->model("MyModel",true);
当然也可以不用配置文件中的设定 重新定义连接配置
如下
$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);
p.s:若要修改配置文件中的配置可以修改application/config/database.php中的参数
至此MVC三层完毕 是不是比java中struts的简单多了 哈哈
------------------------------------------------------------------------------------
■使用辅助函数
$this->load->helper('name');
name指定辅助函数文件名
如果要一次载入多个辅助函数,你可以这样
$this->load->helper( array('helper1', 'helper2', 'helper3') );
注意:辅助函数无返回值
可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数来实现。
使用辅助函数
例如要使用anchor()来建立一个连接
<?php echo anchor("Welcome/doll",'Click Here');?>