ci框架入门

来源:互联网 发布:js div 重叠 触发事件 编辑:程序博客网 时间:2024/06/04 08:49

Ci基础入门学习总结

1、 在http://codeigniter.org.cn/downloads下载一个版本,解压后把大文件夹下面的文件全部粘贴到你要建立的项目下,比如我这儿是在htdocs下的cilearn文件夹下。所以这个时候你就有必要打开ci里的application里的config下的config.Php修改第17行的$config['base_url']改为’http://localhost/cilearn’;这样你就可以第一次访问ci框架,在浏览器地址栏 输入127.0.0.1/cilearn/index.php

2、 控制器中文件名可以小写,但里面的类最好首字母大些(老版本强制要求),并且要和控制器文件名一样。总之控制器的文件名要和里面的类名字一样,大小写不分都没关系。

【发现包含文件不能在类里面,要在类外面】,为模版变量赋值,只要用一个数组即可,随便起名,比如$data1['title']="快乐的大凡子";就赋值了一个$title,到时候在模板里,直接<?php echo $title; ?>就好了,最后把赋值好的$data1加入$this->load->view("dafanzi.html",$data1);需要说明一点,在加载视图的时候,如果模版是直接用dafanzi.php这就可以不加php这个后缀,但如果是dafanzi.html或者是dafanzi.tpl就必须加后缀

3、 控制器对象ci_controlle,可以说它是一个超级对象,所有的控制器都会继承这个超级对象。你可以var_dump($this);看一下啊就知道了。然后里面有几个属性,$this->load,这个属性实例化了一个装载器对象,这个对象的文件在system/core/loader.php这和装载器有很多方法,view(),vars(),databases(),model()(装载模型对象),helper()。这里面的databases()加载systetm/databases里面的方法(加载数据库操作对象)。这里的hlelper()加载systetm/helper下的方法(加载一个帮助的类)。除了$this->load这个对象,ci_controller里还有$this->uri这个对象,已经实例好了和$this->load一样。这个对象提供方法管理url的一些方法。从主入口文件后,其后的类容,可以以每一个分隔符进行分段。想得到某一个参数值直接 $this->uri->segment(数字);或者在控制器中的每个方法,填写几个参数用来接受url中传递的值。因为这样ci 的url模式就和大众的pathinfo模式有一些区别。主入口文件/控制器名/方法/参数值1/参数值2

4、 可以ci的模板里也使用$this这个超级对象。相对于$this->uri这个对象,还有$this->input这个对象,用于得到post传进来的方法,$this->input->post(‘name’);或者是server全局变量$this->input->server(‘DOCUMENT_ROOT’);里面该大些的地方一定要大写。然后就是数据库访问了,先说第一种简单的数据库访问。首先你要去application/config/database.php下面改相应的配置,主要是密码用户名,数据库,数据库类型,host。其他默认就好了。然后在你的控制器方法里先用$this->load->database()执行,这个就是加载数据类的。然互$this->db这个超级对象的属性就被赋予了数据库操作类的实例。这里介绍下这个类的几个实例。第一个$res=$this->db->query($sql);这个会返回一个对象,$list=$res->result();这个$res->result()会返回一个数组对象(对象构成的数组),有几条记录,就有几个对象。如果你想返回成数组形式,用$res->result_arry(),会得到一个二维数组;如果你只是想返回第一条记录,可以用$res->row(),用于返回第一条记录,是个对象。如果想返回一条数组,用$res->row)arry();

5、 $this->db的参数绑定问题sql=”select * from blog_user where name=?”

$this->db=>query(sql,$name);//这里的$name是一个字符串,如果有多个问号,则要是一个数字索引数组,这就可以解决一些安全问题

6、 表前缀,一般的表前缀都要去配置文件中修改这里配置文件的路径为application\config\database.php里,为‘dbprefid’赋值一个字符串就行了,而那个数组里还有一个键为‘swap_pre’你也要赋一个值,赋的这个字符串就可以当成常数在脚本里面用了(一般这两个开始的赋成一样的值)。然后发现一个问题,我们经常在一个模块下的某个方法里加载$this->load->database()这很麻烦是不?所以就在application\config\autoload.php里在$autoload[libraries]的数组里添加一个相应类的字符串,这里就添’database’ 还有$this->db->query($sql),如果里面的$sql语句是updata,insert,delete,这句执行后返回的就不是资源,而是一个bool值。如果你想进一步了解影响的行数,或者执行后自增的ID之类的就可以分别用$this->db->affected_rows()(都使用)   $this->db->insert_id();(只使用insert)

7、 现在将AR模型,这个是ci自己格式的数据库操作,首先你要在application/config/下的database.php中把$active改成true,并且你的数据库配置信息也要配置好。然后把你的自动加载database类也打开,不然就就在每个方法中自己手动加载 $this->load->database()。AR中,配置好表的前缀后,然后在后面的代码中就不用加表前缀了,框架会自动加。  $res=$this->db->get(‘表名’)//返回结果集对象和前面的->query(select……)一样。$this->db->insert(’表名‘,数字关联数组) $this->db->update(‘表名’,以字段为键的管理数组,第三部是 where条件[最好用数组例如array(‘id’=>3)])。这个也是返回一个bool值。其他的影响了多少行,自增ID都和前面的一样。删除是$this>db->delete(‘表名’,wher 条件[最好用数组例如array(‘id’=>3)])。

8、  Ar模型中的链式操作,$res=$this->db->select(‘id,name’)->from(‘user’)->where(‘id>=’,2)->li

mit(2,0)->order_by(‘id desc’)->get();/*(在word中把单词转换大小写用shift+ f3)*/记住一点这里的limit和自己手工输的顺序刚好是相反的。再者就是里面的where语句,你可以用两个字符串,第一个字符串和第二个字符串,你不输比较运算符,就会默认输出=。要加比较运算符也要加在第一个字符串的后面且中间有个空格。

9、 ci中的扩展控制器,你会注意到在ci主文件夹下有一个application目录,和一个system目录。这两个目录下有一些相同的目录。Cor,helps,libraries之类的。这是为什么呢?其实这个就是为了扩展ci。比如你想扩展你的CI_Controller,你就可以在application下的core里写一个MY_controller.php在里面写个继承自CI_Controller的类,如果你很NB,你可以不继承,自己写一套。这里为什么是MY_这个是很有考究的,如果你觉得MY_不好看,你可以在application/config/config.php里找打$config['subclass_prefix']= 'MY_';把它改成你想要的模式,注意这两个必须要匹配。

10、           ci中的模型哈,首先命名 文件名要小写,类的首字母要大些(强制要求),然后原则上是一个数据表建立一个模型。对数据的操作全部写在模型里。不要在控制器中为好。然后就是在模型里所有超级对象的属性都可直接使用(其实你还是要自动加载里填写‘ database’)。在控制器里加载model,用$this->load->model('user_model');另外你在控制器里还可以给模型起个别名,$this->load->model('user_model','user');使用模型的方法$list=$this->user->getall();顺带说一下视图,视图第二个参数是数据,用管理数组传递,键就是一个字符转,但在视图可i就是相应的php变量名,值是你要传递的值。

11、           这里说一下url相关的函数。首先在控制器中的add方法中加视图载表单的话,你在表单的action处怎么填?写死的方法就是在那里写/cilearn/index.php/user/insert(假如要传到user里insert方法中)。不过有一种比较灵活的方法,就是在add方法里先$this->load->helper(‘url’); 当然你不想每次都load这个的话,你就在application下的config目录下找打autoload.php然后找到$autoload['helper'] = array();在里面加一个‘url’,然后在视图表单出的action位置你就填action=”<?php  echo site_url(‘user/insert’); ?>”.但对于其他目录,不实在控制器里怎么办?放心还有一个.你可以用base_url()表示http//localhost/cilearn/就是ci的根目录。

12、           现在说一下ci的分页。首先你要加载分页类文件,在你需要分页的方法里用$this->load->library(‘pageination’);之后你就继续设置每页显示的条数$config[‘per_page’]=10;设置总共有多少页$config[‘total_rows’]=100;你就可以使用了,但你会发现url会有些问题,因为这些每次请求的分页在一个控制器类的方法里所以用site_url比较合适。所以你可以设置$config[‘base_url’]=site_url(‘user/test’);这样url就好一点了,你会注意到……/user/test/数字。这个数字是已经显示了多少也,比如在我们举的这个例子中,你指向第三页,数字就是13、也就是limit的第一个参数。所以你写sql语句的时候,你要写成$offset=intval($this->uri->segment(3));注意这里之所以要加intval函数,就是避免第一页时,哪儿的offset不加intval, 则会是空白。然后你就可以部署分页图标了$data[‘links’]=$this->pagination->create_links();$this->load-view(‘user/test’,$data);你用的时候在view里echo $links;就好了。这个默认的偏移量会在url的第三段里,如果你不想放在第三段的话,你就用$config[‘uri_segment’]=数字 改一下啊就好了。如果你想该一下分页栏的一些显示,比如上一页,下一页,首页尾页,查手册,添加$config[‘’]=

14、关于ci中路由和隐藏入口文件。首先我们觉得index.php这个入口文件很丑是不?那我们就把他去掉。首先打开你的apache的配置文件httpd.conf里首先把LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉。再搜索AllowOverride None(配置文件中有多处),看注释信息,将相关.htaccess的该行信息改为AllowOverride All。然后就是把application/config下的config.php文件找到$config['index_page'] = 'index.php'赋值为空;然后就是再ci框架的更目录,也就是入口文件同级目录下,声明一个.htaccess文件。怎么生存这个文件呢?首先你创建一个记事本。然后点击另存为,在另存为的时候那里的文件名设置为”.htaccess”注意一定要有双引号。这个文件里的类容是<IfModule mod_rewrite.c>

   RewriteEngineon

   RewriteCond%{REQUEST_FILENAME} !-d

   RewriteCond%{REQUEST_FILENAME} !-f

   RewriteRule^(.*)$ /cilearn/index.php/$1 [QSA,PT,L]

</IfModule>

关于RewriteRule ^(.*)$ /cilearn/index.php/$1 [QSA,PT,L]这一行 很有考究。你可以这样写也可以RewriteRule^(.*)$  index.php/$1 [QSA,PT,L]这样,如果你的ci直接在服务器下你就RewriteRule^(.*)$  /index.php/$1 [QSA,PT,L],注意到区别没?

15、关于ci的文件上传,首先你得创建一个表单。比如我在user.php这个控制器下写一个files方法名。里面就用于创建上传表单,这个方法没必要写太多,你只要加载一个$this->load->hlper(‘url’);然后加载视图就好了$this->load0>view(‘user/file’);然后你就在那个模版文件里写一个表单,注意的是表单form要多一个属性,enctype=”multipart/form-data”这样就可以写上传表单了,记住要上传文件标签里,要写一个name属性,这个用于处理上传事宜。然后在form的action里要写在控制器的某个方法里<? Echo site_url(‘user/upload’);然后你就要在user/upload里写上传的处理方法。首先你在这里要配置上传文件的一些信息。$config[‘upload_path’]=”./uploads’;这里注意是path不是url。又因为我们只是虽然每次使用各个控制器中的方法,但我们都其实只访问了index.php所以 .   就代表index.php同级目录,所以你要在这个目录下先手动建立好一个uploads文件夹。然后就是规定可以上传的文件类型,$config[‘allowed_types’]=’gif|png|jpg|jpeg’;然后你就可以加载上传类。$this->load->library(‘upload’,$config);然后就可以用$this->upload->do_upload(‘表单的file类型写的name’);然后如果你想该上传之后的文件名字啊,详情请看ci用户手册。但关于上传之后的信息,你可以用$this->upload->data();

    这个方法会得到一个数组。详情你var_dump一下嘛。

16、关于ci的session,其实这个新版本的3.0嘛就和php中的session差不多了。不过还是有些格式上的要求嘛,首先你得在你的方法中打开session类库。$this->load->library(‘session’);然后就可以使用了,比较传统的方法是使用 $this->session->set_userdata(‘user’,$user);$user就是你要存的数据,而’user’就是相当与你的这个session值的键。或者是多个session一起设置的话你就在set_userdata()参数放一个有键值的关联数组,键就是session名,值就是sesion值。然后你在另一个地方使用session的话,首先你也要先加载session类,$this->load->library’(session’);然后获得值的话可以直接$_SESSION[‘item’]或者$this->session->item或者$this->session->userdata(‘item’);然后你想生成一种只能用一次的session 就可以用到flashdata,比较传统的方法是$this->session->set_flashdata(‘item’,’value’);然后在另一处获取就可以了,可以用$_SESSION[‘item’]; 或者$this->session->flashdata(‘item’);

17、对于ci中的验证码使用。这儿总结一下。首先你要创建一个文件夹用来存放验证码图片。这里我创建在入口文件同级目录吧。取名叫captcha。然后你就在控制器的方法里,可以使用验证码了。你要创建验证码对吧?所以你要先加载这个函数。用$this->load->helper(‘captcha’);然后你就创建一个关联数组吧。我这里这样$vals=array(‘img_path’=>’./capcha’/,’img_url’=base_url()./captcha’’)这两个关联数组是必须的,更详细的配置直接加就可以了。比如图片的大小,过多久执行图片自动删除或者你自定义验证码的类容。之后你就可以使用函数生存验证码了。$cap=create_captcha($vals);这个是返回一个数组。到时后你让验证码图片生成出来,直接echo $cap[‘image’];就可以了。因为$cap[‘image’]就是包含验证码图片的<img>标签,直接echo就好。对了还没介绍验证码的值。你可以用$cap[‘word’]来获取,使用的话直接存在session就好了。

18、好现在说一下表单验证。你要使用表单验证和以前一样,也得加载一个类噻。$this->load

   ->library(‘form_validation’);然后就设置验证规则了。格式为$this->form_validation->set_rules(‘name’,’用户名’,’required’);第一个是表单的里的name属性值,第二个是你给这个属性取得标签(自己任意取吧),第三个就是规则,详情去看手册吧,神马邮箱验证规则啊,都有。设置好后就开始验证了吧。$bool=$this->form_validation->run();你懂得这个函数返回一个布尔值。用于判断所有的规则验证成功没。然后如果是错误的话就load->view(表单模版)。(插一下嘴,这里你的表单和表单处理可以放在一个方法中,因为如果第一次加载出这个页面。之前的判断都是错误的,因为不知道相关表单属性嘛,所以直接bool 是false。就到加载表单页面了)。然后你是不是想在表单的地方保存之前的默认值啊?放心也有办法。在你的表单模板里。直接在value的地方echo set_value(‘name’);就行了。对了,你是不是还想每个表单属性旁边提示每次的错误啊?很简单你在相应的属性旁边echo form_error(‘name’);就可以了,然后也许你有写强迫症,这个错去的书写格式不好。他默认的是<p> 标签如果你想diy的话,你就可以在form_error()再加两个参数,作为错误信息的开始和结尾标签。比如form_error(‘name’,’<span>’,’</span>’); 或者你又觉得哈我们做后台的不需要前端那样花哨,讲究格式,你完全可以一口气把这些所有错误消息数出来直接echo validation_errors();

未完待续……

好了ci的基本知识我就总结完了

 

0 0
原创粉丝点击