CodeIgniter简介

 

参考网页:http://kingphp.blog.163.com/blog/static/20042324420125510938403/

隐藏index.php与加载外部文件:
 
    其实不管是在用CI还是ZF都有同样一个问题,就是路径的问题。前期,我在用ZF做CMS时,我在.htaccess文件中设置了如遇到js,css,img等资源文件都不重定向。但今天在用CI时,却忘记了,弄了半天都没搞好,登陆CI的中国官方网,终于在论坛高手的帮助下把问题觖决了,在这里把它贴出来,供大家分享。

  首先,隐藏url中的index.php文件,这样访问其它目录的时候就不会有http://www.xxx.com/index.php/xxx的样式出现,面是直接http://www.xxx.com/xxx形式,在根目录.htaccess文件里设置(作用是隐藏index.php,有时index.php可能不在根目录,则htaccess须移到index.php所在目录),如下:

    RewriteEngine on    
    RewriteCond $1 !^(index\.php|images|js|css|robots\.txt)    #这里排除了images、js、css目录及index.php、robots.txt文件
    RewriteRule ^(.*)$ index.php/$1 [L]


   这里JS,CSS,IMG等资源文件夹与SYSTEM文件夹放在同一级下,独立放置的好处是不用受htaccess的限制,因为htaccess文件写明Deny from all,即拒绝访问。打开application/config/config.php改写配置:

    $config['base_url'] = "http://127.0.0.1/";
    $config['index_page'] = "index.php";


   如果, $config['base_url'] = "http://127.0.0.1";后面没加'/',则在model_rewrite最后一行应写RewriteRule ^(.*)$ /index.php/$1 [L],在index.php前加一个'/'。然后在JS文件夹中建立ajax.js文件,我在VIEW层中的文件为index.html。这样我要引入JS时,可以用CI自带的BASE_URL来设置,如下:

   在controllers里相关控制网页里添加(在其它load之前):

    $this->load->helper('url');

   在views表现的index.html里:

    <script type="text/javascript" src="http://sumsung753.blog.163.com/blog/<?=base_url().'js/ajax.js'?>"></script>   注:这里url是网站相对URL(好处是可以更改根目录后相对地址不用改变)

  这里js文件夹没有重定向,所以可以正常访问,而如果是受限制的页面则比较麻烦了。

好了,CI中引入外部的JS与CSS就这么简单。

注别的说明:“ RewriteCond $1 !^(index\.php|images|js|css|robots\.txt) ”这里代码的意思是:任意你想访问的资源都不被重定向时,都可写在这里。有时,网站没有加载CSS,JS(它的路径都是正确的)时,都是被重定向了,这要注意。

具体可查看CI的中国官论坛 http://codeigniter.org.cn/user_guide/helpers/url_helper.html,URL辅助函数一节,
http://codeigniter.org.cn/user_guide/general/urls.html,url设置,
http://codeigniter.org.cn/forums/thread-4-1-2.html,Hex关于隐藏index.php的说明,但他在model_rewrite用了index\\.php,我觉得用双反斜杠有误。

 

数据间的传输:


1、将数据从控制器传入视图
    由于控制器controllers在ci中扮演交通警察的角色,其是一个大类,而视图view作为controller类中的一个函数中的函数,所以view可以使用controller中的属性。所以可以这样写:
Controller类Test

class Test extends CI_Controller {
   public static $test2=''; //定义一个属性
   public function __construct(){
       parent::__construct();
       self::$test2 = $this->load->view('new','',true); //给$test2这个属性赋值
   }
   public function index()    {    
       $this->load->helper('url');            
       $this->load->view('anchor');    
   }
}

View.php

<?php
echo Test::$test2; //直接使用类中的值
?>

这种直接使用controllers类中的值的方法虽然可行,却不是ci所提倡的。一般来说在controller中使用$this->load->view()的时候可以通过参数传值给view视图:

function index()
{
   $data['css'] = $this->css;
   $data['base'] = $this->base;
   $data['mytitle'] = 'Welcome to this site';
   $data['mytext'] = "Hello, $name, now we're getting dynamic!";
   $this->load->view('testview', $data); //$data通过参数传递到view
}

这里,把需要传递的数值加入至$data数组,ci在核心类中给自动使用extract()函数把数组“解压”出来,成为一个个变量。所以在view中可以直接这样使用变量:

echo $css;

2、模型与视图的交互
在ci中模型总是用以处理数据,模型中数据处理也是通过controller中转到view,所以最好不要试图模型直接与视图联系。手册中有这样一个例子:

class Blog_controller extends CI_Controller {
   function blog()    {
       $this->load->model('Blog'); //载入模型
       $data['query'] = $this->Blog->get_last_ten_entries(); //使用模型中的方法,将返回值存入$data数组
       $this->load->view('blog', $data); //像上例一样,通过参数传给视图view
   }
}
 




你可能感兴趣的:(CodeIgniter)