codeigniter实例教程中控制层的实例类名和文件名为什么大小写不完全一致

以下试题来自:
单项选择题下列说法中,(
)是正确的。A.Java是不区分大小写的,源文件名与程序类名不允许相同B.Java语言以方法为程序的基本单位C.Applet是Java的一类特殊应用程序,它嵌入HTML中,随主页发布到互联网上D.以//符开始的为多行注释语句
为您推荐的考试题库
你可能感兴趣的试题
1A.privateB.无修饰符C.publicD.protected2A.Java是面向对象语言B.Java以类为程序的基本单位C.Java语言中,对象和实体不是一一对应的关系D.在Java语言中,类是具有某种功能的基本模块的描述3A.J2EEB.J2MEC.J2SED.J2DE4A.IntegeMAX_VALUEB.8.8FC.2.0E16D.true5A.2个B.3个C.4个D.5个
热门相关试卷
最新相关试卷1999人阅读
application存放与具体某个网站相关的所有数据,在该目录下包含以下文件夹:
cache:存放缓存文件。
config:网站的配置文件目录。
controllers:控制文件的目录。
core:应该是用于重写 systesms/core 中相应文件用的把。
errors:里面主要是定义了一些展示错误信息的页面。
helpers:存放实现一些辅助函数,或者修改、扩展 systems/helpers 中的相应文件。通过 $this-&load-&helper('filename'); 来引入帮助文件,直接在需要的地方调用函数名即可调用相应的函数。
hooks:不知道干嘛的。
language:存放与语言或者区域信息相关的内容。
libraries:存放自定义类文件,或者改写、扩展 systems/libraries 中的相应类。
注:通过 $this-&load-&library('Class_name',$params); 来实例化一个自定义类,官网的指南有错,这里的类名应该是 case sensitive 的; 通过 $this-&class_name-&function_name(); 来调用类的成员函数,这里的类名是 case insensitive 的。两处类名的大小写一定要注意。
logs:存放日志文件。
models:数据代码文件,MVC中的M。
third_party:第三方插件,类似于helpers目录的功能,但是这里面的文件包含更单一的功能函数。
views:视图文件。
创建自己的类文件步骤:
1. 在 libraries 目录下新建名为 HitClass.php 的类文件;
2. 在HitClass.php 文件中创建 HitClass 类;
3. 如果需要在类中调用config中的配置信息,可以通过&$ci = & get_instance(); $ci-&config-&load('config_file_name'); 来获取配置文件中的数据。自定义的配置文件中的数据只能用 $config 数组保存,不能自定义别的数组名字码?至少我试过不行。
4. 这样就可以在别处调用该类了。
5. 关于构造函数传递参数的问题,据说有两种方法,一种是通过在 $this-&load-&library() 函数中添加params的第二参数; 另一种是在config目录下建立与类名同名的配置文件。但是这两种方式我都没有尝试成功,请知道怎么使用的跟我说声。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:191354次
积分:1699
积分:1699
排名:第19289名
原创:38篇
转载:11篇
评论:56条
(10)(7)(15)(1)(2)(3)(1)(1)(8)(1)1047人阅读
转载请标明出处:
文章出自:
你也可以查看我的其他同类文章,也会让你有一定的收货!
我们在平时的开发过程中,可能会需要更改文件名称的大小写,但是改好后,在Git中没有任何反应,使用git status时,如果遇到下面情况,说明GIT大小写不敏感,如下:
[rock@ROCK-PC]$ /d/WampServer/www/hexu.org/code (dev)
$ git status
On branch master
Your branch is up-to-date with
nothing to commit, working directory clean
git对文件内的大小写是敏感的
如何解决Git的对文件名大小不敏感问题呢?
方案一:设置Git大小写敏感(不推荐):
$ git config core.ignorecase false
使用这种方法会造成一个问题:
在分支B使用了$ git config core.ignorecase false命令,并且手动把文件名改为TEST.txt,这时候再想回到分支A,就会出现如下错误:
he@he-PC MINGW64 /f/StudioProjects/artandroidclient (B)
$ git checkout A
error: The following untracked working tree files would be overwritten by checkout:
artandroidclient/src/main/java/cn/hdnc/artandroidclient/test.txt
Please move or remove them before you can switch branches.
意思是:分支A中的test.txt将会重写分支B的文件
找了半天,没有找到两全其美的办法
方案二:重命名文件(推荐):
第一种方法(推荐):
git mv A B 重命名A为B
如果直接将大写名称改为小写,由于此时git是大小写不敏感的,所以不会修改。如下所示:
he@XueXuan-PC MINGW64 /f/StudioProjects/artandroidclient (master)
$ git mv artsdk/src/main/java/cn/hdnc/ArtSDK artsdk/src/main/java/cn/hdnc/artsdk
Rename from 'artsdk/src/main/java/cn/hdnc/ArtSDK' to 'artsdk/src/main/java/cn/hdnc/artsdk/ArtSDK' failed. Should I try again? (y/n) n
fatal: renaming 'artsdk/src/main/java/cn/hdnc/ArtSDK' failed: Permission denied
先把文件名称改为其他的,再改为指定的文件名。如下所示:
he@XueXuan-PC MINGW64 /f/StudioProjects/artandroidclient (master)
$ git mv artsdk/src/main/java/cn/hdnc/ArtSDK artsdk/src/main/java/cn/hdnc/art
he@XueXuan-PC MINGW64 /f/StudioProjects/artandroidclient (master)
$ git mv artsdk/src/main/java/cn/hdnc/ArtSDK artsdk/src/main/java/cn/hdnc/artsdk
fatal: bad source, source=artsdk/src/main/java/cn/hdnc/ArtSDK, destination=artsdk/src/main/java/cn/hdnc/artsdk
he@XueXuan-PC MINGW64 /f/StudioProjects/artandroidclient (master)
$ git mv artsdk/src/main/java/cn/hdnc/art artsdk/src/main/java/cn/hdnc/artsdk
第二种方法:
运行 git mv 就相当于运行了下面三条命令():
$ mv README.md README
$ git rm README.md
$ git add README
所以也可以自己去运行这些命令,到达git mv的效果
在使用git rm 命令时,先备份数据!!!
git commit -m "rename file"
由于我是与大家共用的仓库,所以我采用的方案2解决掉了。
$ git rm code/library/BuildTag*. git status
On branch dev
Changes to be committed:
(use "git reset HEAD ..." to unstage)
code/library/BuildTagAfc.php
code/library/BuildTagAfs.php
rock@ROCK-PC /d/WampServer/www/hexu.org/code (dev)
$ git add code/library/BuildTag*. git status
On branch dev
Changes to be committed:
(use "git reset HEAD ..." to unstage)
code/library/BuildTagAfc.php -& code/library/BuildTagafc.php
code/library/BuildTagAfs.php -& code/library/BuildTagafs.php
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:264724次
积分:4724
积分:4724
排名:第4900名
原创:163篇
转载:160篇
评论:129条
在阅读文章的过程中,如果有任何疑问、语言表达不清的地方,可以评论告诉我,我会第一时间回复你。有其它的疑问,也可以在评论里问我,知无不答。
文章:12篇
阅读:22691
(2)(2)(10)(7)(6)(2)(15)(10)(22)(12)(8)(40)(8)(26)(29)(20)(20)(13)(14)(4)(12)(1)codeigniter(2)
0、控制器类必须继承CI_Controller,类名首字母必须大写
&& (默认)/index.php/控制器名/方法名/其它附加的& &
&&& (控制器名必须与对应控制器文件名大小写一样,方法名也要大小写一样)
1、URL向方法传递参数,/index.php/products/shoes/a/b
class Products extends CI_Controller {
&&& public function shoes($a, $b)
&&&&&&& echo $a;
&&&&&&& echo $b;
2、修改默认的“URL调用方法”的行为
在Controller中定义_remap方法,那么it will always get called regardless of what your URI contains.
public function _remap($method)
&&& if ($method == 'some_method')
&&&&&&& $this-&$method();
&&&&&&& $this-&default_method();
&_remap()有第二个可选的参数.
public function _remap($method, $params = array())
&&& $method = 'process_'.$
&&& if (method_exists($this, $method))
&&&&&&& return call_user_func_array(array($this, $method), $params);
&&& show_404();
3、控制页面输出,
&& 在控制器中定义_output方法,最后页面输出数据不会发送到浏览器会传递给_output处理
public function _output($output)
&&& echo $
4、在页面最下面显示调试信息
&& 在控制器方法中$this-&output-&enable_profiler(true);//禁用是false默认是禁用
&& 在application/config/profiler.php中可以配置是否显示调试信息中的每块内容
&& $config['config']= FALSE;
&& $config['queries']= FALSE;
&& 也可以在控制器中:
&& $sections = array(
&&& 'config'& =& TRUE,
&&& 'queries' =& TRUE
&& $this-&output-&set_profiler_sections($sections);
&& 到达动态控制调试信息的显示。
&& $sections所有可用的key
& &&& &&& Key&& &&&&&&&&&&&&&&&&&&&&& 描述&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 默认值
& &&& &benchmarks&&&&&& &&& &Elapsed time of Benchmark points and total execution time&& & TRUE
& &&& &config&& &&&&&&&&&&&& 系统配置变量&&&&&&&&&& &&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &controller_info& &&& &访问的控制器名和方法名&&&&&&&&& &&& &&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &get&& &&&&&&&&&&&&&&& GET的数据&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &http_headers&& &&&&&& http请求头信息&&&&&&&&&&&&&&&&&&&&&&&&&&& &&& &&&&&&&&&&&&&&& TRUE
& &&& &memory_usage&&&& &&& &内存使用单位byte && &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &post&& &&&&&&&&&&&&&& POST的数据&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &queries&& &&&&&&&&&&& 所有执行的SQL语句包括执行时间&&&&&&&&&&&&&&&&&&&&&&&&& &&& && TRUE
& &&& &uri_string&& &&&&&&&& 当前请求的URL&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& TRUE
& &&& &query_toggle_count 超过多少条查询隐藏查询信息块&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 25
&&& CodeIgniter will parse the pseudo-variables {elapsed_time} and {memory_usage} in y
&&& our output by default. To disable this, set the $parse_exec_vars class property to FALSE in your controller.
&&& $this-&output-&parse_exec_vars = FALSE;
5、控制器中不想被URL访问的方法
&& 方法用private修饰并且方法名以下划线开始,那么这个方法就不能通过URL访问
&&& private function _utility()
&& // some code
6、控制器controllers文件夹中建立子文件夹功能,
&& 访问时变为/index.php/子文件夹名/控制器名/方法名/其它附加的&& &
7、子类控制器有构造方法时必须先调用父类构造方法parent::__construct();
8、系统保留名称,避免在自己的代码中出现。
& 控制器名
&&&&&& CI_Base
&&&&&& _ci_initialize
&&&&&& Default
&&&&&& index
&&&&& is_really_writable()
&&&&& load_class()
&&&&& get_config()
&&&&& config_item()
&&&&& show_error()
&&&&& show_404()
&&&&& log_message()
&&&&& _exception_handler()
&&&&& get_instance()
&&&&& $config
&&&&& $mimes
&&&&& $lang
&&&&& ENVIRONMENT
&&&&& FCPATH
&&&&& SELF
&&&&& BASEPATH
&&&&& APPPATH
&&&&& CI_VERSION
&&&&& FILE_READ_MODE
&&&&& FILE_WRITE_MODE
&&&&& DIR_READ_MODE
&&&&& DIR_WRITE_MODE
&&&&& FOPEN_READ
&&&&& FOPEN_READ_WRITE
&&&&& FOPEN_WRITE_CREATE_DESTRUCTIVE
&&&&& FOPEN_READ_WRITE_CREATE_DESTRUCTIVE
&&&&& FOPEN_WRITE_CREATE
&&&&& FOPEN_READ_WRITE_CREATE
&&&&& FOPEN_WRITE_CREATE_STRICT
&&&&& FOPEN_READ_WRITE_CREATE_STRICT
9、视图永远不会被直接调用,必须被控制加载
& 加载视图文件name.php $this-&load-&view('name');如果是name.html那么就写为 $this-&load-&view('name.html');
& 可以同时加载多个视图
& class Page extends CI_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/file_name');
10、向视图传递数据:
&& 数据是数组:
&& $data = array(
&&&&&&&&&&&&&& 'title' =& 'My Title',
&&&&&&&&&&&&&& 'heading' =& 'My Heading',
&&&&&&&&&&&&&& 'message' =& 'My Message'
&&&&&&&&& );
&& $this-&load-&view('blogview', $data);
& 视图中输出:
& &?=$title?&
& 数据也可以是对象:
& $data = new Someclass();
& $this-&load-&view('blogview', $data);
& 视图中输出:
& &?=对象属性名?&
11、循环数据
class Blog extends CI_Controller {
&& &function index()
&& &&& &$data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');
&& &&& &$data['title'] = &My Real Title&;
&& &&& &$data['heading'] = &My Real Heading&;
&& &&& &$this-&load-&view('blogview', $data);
&&?php foreach ($todo_list as $item):?&
&&& &li&&?php echo $?&&/li&
上面用到了替换语法:类似的还有 endif, endfor, endforeach, and endwhile
快捷输出&?=变量?&
官方提供也有一个模板引擎,但是为了使页面运行更快不建议使用,建议使用纯php+语法替换
12、返回视图数据,而不是输出到浏览器
& $string = $this-&load-&view('myfile', '', true);
& 第三参数This can be useful if you want to process the data in some way.
& If you set the parameter to true (boolean) it will return data.
& The default behavior is false, which sends it to your browser.
& Remember to assign it to a variable if you want the data returned:
13、URL安全,URL地址中只能包含这些字符: 数字 文本 ~ . : _ -
&& 魔法转义magic_quotes_runtime在程序初始化时就被禁用了。
& you don't have to remove slashes when retrieving data from your database.
14、错误信息控制
& By default, CodeIgniter comes with the environment constant set to 'development'.
& At the top of index.php, you will see:
& define('ENVIRONMENT', 'development');
& Setting CodeIgniter's ENVIRONMENT constant in index.php to a value of 'production' will
& turn off these errors. In development mode, it is recommended that a value of 'development' is used.
15、使用system/libraries 或者application/libraries里面的类库时
&& 首先要加载$this-&load-&library('email');
&& 然后使用:$this-&someclass-&some_function();& // Object instances will always be lower case
&& 带参初始化:
&& $params = array('type' =& 'large', 'color' =& 'red');
&& $this-&load-&library('Someclass', $params);
&& $this-&load之后创建一个类的实例$this-&someclasss。
16、在自己的库中利用CodeIgniter资源
The Database classes can not be extended or replaced with your own classes.
All other classes are able to be replaced/extended.
&&& $this, however, only works directly within your controllers, your models, or your views.
If you would like to use CodeIgniter's classes from within your own custom classes you can do so as follows:
$CI =& get_instance();
$CI-&load-&helper('url');
$CI-&load-&library('session');
$CI-&config-&item('base_url');
The file name will be a lower case version of your class name. For example, if your class is this:
class User_model extends CI_Model {
&&& function __construct()
&&&&&&& parent::__construct();
Your file will be this:
application/models/user_model.php
18、加载模型
&$this-&load-&model('Model_name');
&$this-&load-&model('blog/Model_name');//blog是models一个子文件夹
&使用:$this-&Model_name-&function();
& $this-&load-&model('Model_name', 'fubar');
& $this-&fubar-&function();等价于$this-&Model_name-&function();
19、加载系统库system/libraries
&&& $this-&load-&library('email');
&&& $this-&load-&library(array('email', 'table'));
20、载入辅助函数
&& 例如,要载入文件名为url_helper.php的URL Helper,你将会用到下面的语句:
&& $this-&load-&helper('url');
&& url 是辅助函数文件的名字(不带.php后缀 和&helper& 部分)。
&& 载入多个辅助函数
&& 如果你想一次载入多个辅助函数,你可以这样做:
&& $this-&load-&helper( array('helper1', 'helper2', 'helper3') );
&& 一旦你载入了想要用到辅助函数文件,你就可以用标准的函数调用方法来使用里面的函数。
&& 自动载入辅助函数
&& 如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ,
&& 并往自动载入数组(autoload array)中增加辅助函数来实现。
&& &扩展& Helpers
&& 你如果想 &扩展&一个原有的 Helpers,,可以在你的 application/helpers/ 目录下创建一个新的helper,
&& 新的helper的名字是在被“扩展”的Helper的名字开头多加一个 MY_ (这是可以配置的. 见下.).
&& 如果你想做的只是在原有的helper中添加一些新的功能,比如,添加一两个新的方法,或者是修改一个方法;
&& 就不值得重写自己的helper。在这种情况下,最好是“扩展”已有的helper。“扩展”一词用在这里不是很恰当,
&& 因为Helper的方法是procedural 和 discrete的,在传统的语言环境中无法被“扩展”,不过在CodeIgniter中,
&& 你可以添加或修改helper的方法。
&& 例如,扩展一个本地已有的 Array Helper 你应该建立一个文件: application/helpers/MY_array_helper.php,
&& 并添加或重写(override)其中的一些方法:
&& // any_in_array() is not in the Array Helper, so it defines a new function
&& function any_in_array($needle, $haystack)
&&&&&& $needle = (is_array($needle)) ? $needle : array($needle);
&&&&&& foreach ($needle as $item)
&&&&&&&&&& if (in_array($item, $haystack))
&&&&&&&&&& {
&&&&&&&&&&&&&& return TRUE;
&&&&&&&&&& }
&&&&&&&&&& }
&&&&&& return FALSE;
&& // random_element() is included in Array Helper, so it overrides the native function
&& function random_element($array)
&&&&&& shuffle($array);
&&&&&& return array_pop($array);
&& 设定你自己的前缀(Prefix)
&& 用于&扩展& helper 而加上前缀的文件同样也是对库和核心类的扩展.为了设置你自定义的前缀,
&& 请打开 application/config/config.php 文件,然后找到如下的条目:
&& $config['subclass_prefix'] = 'MY_';
&& 请注意所以CodeIgniter自带的库都被冠以 CI_ 这样的前缀,所以请不使用这样的自定义前缀.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:132516次
积分:1646
积分:1646
排名:第19950名
原创:21篇
转载:71篇
(1)(4)(1)(1)(2)(2)(6)(1)(1)(3)(1)(10)(2)(2)(2)(2)(9)(5)(8)(25)(1)(3)PHP中CODEIGNITER开发框架入门教程(2/4)-Php框架模板-Php教程-壹聚教程网PHP中CODEIGNITER开发框架入门教程(2/4)
CodeIgniter是一套给PHP网站开发者使用的应用程序开发框架和工具包。CodeIgniter 是一个简单快速的PHP MVC框架了,下文我们一直来看小编总结的CODEIGNITER框架学习笔记.
注意: 如果你使用php 4,那么请最好不要在类的构造函数中调用 get_instance() .php4在引用位于构造函数中的CI super object时存在问题,因为对象只有在类完全实例化后才存在.
4、载入类库:$this-&load-&library(&类文件名(也是类名)&,&构造函数的参数数组&);//类文件名不用加 上&.php&扩展名(如是扩展系统类库的类,也不要加application/config /config.php:$config['subclass_prefix']所定义的前缀),名字不分大小写;构造函数的参数数组只有在构造函数存在 且需要传入参数的时候才设置。
5、使用类库对象:$this-&小写的类名-&类中的方法(); // 对象的实例名永远都是小写的
钩子(hooks)-扩展框架的核心
1、启用钩子:application/config/config.php =》$config['enable_hooks'] = TRUE;
2、定义钩子:application/config/hooks.php =》
㈠定义单个钩子:
$hook['pre_controller'] = array(
&class& =& &MyClass&, //你希望调用的类名.如果你更喜欢使用过程函数代替类的话,此项留空.
&function& =& &Myfunction&, //你希望调用的函数名.
&filename& =& &Myclass.php&, //包含有你的类/函数的文件名.
&filepath& =& &hooks&, //包含你的脚本的目录名(相对于application文件夹).
&params& =& array(&beer&, &wine&, &snacks&) //你希望传递给脚本的任何参数. 此项是可选的.
㈡定义多个钩子:
$hook['pre_controller'][] = array(
&class& =& &MyClass&,
&function& =& &Myfunction&,
&filename& =& &Myclass.php&,
&filepath& =& &hooks&,
&params& =& array(&beer&, &wine&, &snacks&)
$hook['pre_controller'][] = array(
&class& =& &MyOtherClass&,
&function& =& &MyOtherfunction&,
&filename& =& &Myotherclass.php&,
&filepath& =& &hooks&,
&params& =& array(&red&, &yellow&, &blue&)
3、挂勾点:
pre_system:
系统执行的早期调用.仅仅在benchmark 和 hooks 类 加载完毕的时候. 没有执行路由或者其它的过程.
pre_controller:
在调用你的任何控制器之前调用.此时所用的基础类,路由选择和安全性检查都已完成.
post_controller_constructor:
在你的控制器实例化之后,任何方法调用之前调用.
post_controller:
在你的控制器完全运行之后调用.
display_override:
覆盖_display()函数, 用来在系统执行末尾向web发送最终页面.这允许你用自己的方法来显示.注意,你需要通过 $this-&CI =& get_instance() 引用 CI 超级对象,然后这样的最终数据可以通过调用 $this-&CI-&output-&get_output() 来获得。
cache_override:
可以让你调用自己的函数来取代output类中的_display_cache() 函数.这可以让你使用自己的缓存显示方法
scaffolding_override:
可以让scaffolding(脚手架)的请求去触发你自己的脚本替代.
post_system:
在最终着色页面发送到浏览器之后,浏览器接收完最终数据的系统执行末尾调用。
自动加载资源
CodeIgniter有一个自动加载属性,它允许在系统运行过程中初始的自动加载库(libraries),帮助函数(helpers),插件(plugins)。
要自动加载资源,先打开 application/config/autoload.php 文件,然后增加你想要自动加载的项目在 autoload 数组中(不包括文件扩展名&.php&)。
bool is_php(&版本号&)
如果已安装的PHP版本号等于或高于你所提供的版本号,本函数将返回布尔值 TRUE,否则返回 FALSE。
bool is_really_writable(&path/to/file&)
指定文件是否可写。在Windows平台,is_writable()函数在实际没有文件写权限时也返回真。
mix config_item(&item_key&)
取得单个配置信息
show_error(&消息&[,int $status_code = 500 ])
这个函数将会使用以下错误模版来显示错误消息:
application/errors/error_general.php
show_404(&页面&)
这个函数将会使用以下错误模版来显示 404 错误信息:
application/errors/error_404.php
log_message(&级别&, &消息&)
这个函数可以让你将消息写入记录文件中。你必须在第一个参数中选择三个&级别&中的任何一个, 指明它是哪一类消息(调试debug, 错误 error, 信息info)。 第二个参数是消息本身。
注意: 确保&logs& 文件夹是可写的,才能准确地将消息写入记录文件中。另外,你必须要设置记录的&threshold&来进行记录。例如通过设置&threshold&,你 可以只记录错误类型的消息,而不用记录其他两种。如果你将&threshold&设为0,记录就会被禁止。
set_status_header(code, &text&);
设置服务器状态头(header)。例如:set_status_header(401);// 将header设置为: Unauthorized
脚手架(Scaffolding)
CodeIgniter 的脚手架功能使您可以在开发过程中方便快速的在数据库中添加、删除、修改数据。
非常重要: 脚手架(Scaffolding)只可以在开发过程中使用。因为它提供了非常少的安全保护,所以可以访问到您的 CodeIgniter 站点的任何人都可以添加删除或修改您数据库中的数据。如果您使用脚手架,那么请确认您在使用完之后一定要立刻禁止它。千万不要在上线的站点中激活它,并且 一定要在使用前给它设置一个密匙(secret )。
1、设置一个密匙(Secret Word):application/config/routes.php =》$route['scaffolding_trigger']把值替换成你的密匙(密匙不能 以下划线开头)。
2、激活脚手架:在你的控制器构造函数中添加这样的代码:$this-&load-&scaffolding(&数据表名&);
class Blog extends Controller {
function Blog()
parent::Controller();
$this-&load-&scaffolding(&table_name&);//激活脚手架
3、使用脚手架:www.111cn.net
/index.php/控制器类/脚手架密钥/
脚手架特性只能操作有主键的表,因为这是各种数据库函数所必需的信息。
当一个网页第一次被加载的时候,缓存文件将被保存到system/cache文件夹。下次访问的时候,系统就会直接读取缓存文件,然后返回给用户的浏览器。如果缓存文件过期,它将被删除并重新生成。注意:Benchmark 标签在使用了缓存的页面仍然可用。
1、启动缓存:将代码$this-&output-&cache(n);放在你的控制器类的函数中(代码中的n是你希望缓存更新的分钟数)。
2、清除缓存:将上面的代码从你的控制器类中删除即可。相应缓存会自动过期并被删除
数据库操作
1、初始化数据库类:也就是连接数据库操作
$this-&load-&database(&数据库连接信息&,&是否(TRUE/FALSE)返回连接ID(可用于连接多数据库)&,&是否(TRUE/FALSE)启用Active Record类。默认为 TRUE&);//建立数据库连接
如果以上函数的第一个参数没有任何信息,它将会在系统指定的数据库配置文件中寻找。
数据库连接信息,可以是包含数据库连接配置的数组或DSN字符串。
连接例子1、数据库连接信息是包含数据库连接配置的数组:
$config['hostname'] = &localhost&;
$config['username'] = &myusername&;
$config['password'] = &mypassword&;
$config['database'] = &mydatabase&;
$config['dbdriver'] = &mysql&;
$config['dbprefix'] = &&;
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$config['cache_on'] = FALSE;
$config['cachedir'] = &&;
$config['char_set'] = &utf8&P;
$config['dbcollat'] = &utf8_general_ci&;
$this-&load-&database($config);
连接例子2、数据库连接信息是DSN字符串:
$dsn = &dbdriver://username:password@hostname/database';
$this-&load-&database($dsn);
连接例子3、连接多数据库:
$DB1 = $this-&load-&database(&group_one&, TRUE);
$DB2 = $this-&load-&database(&group_two&, TRUE);
$DB1-&query();//只能使用这种方式,不能使用$this-&db-&query()这种方式
$DB1-&result();//同理
重新连接/保持连接有效:
$this-&db-&reconnect();
如果你的所有页面均要求初始化数据库类,你可以让它自动加载。
要启用&自动连接&,可在application/config/autoload.php文件中的library数组里添加database。
2、标准查询:
㈠多结果标准查询(对象形式):
$query = $this-&db-&query(&SELECT name, title, email FROM my_table&);
if ($query-&num_rows() & 0)//如果你的查询可能不返回结果,建议你使用num_rows()函数来测试查询结果
($query-&result() as $row)
echo $row-&//上面的result()函数返回一个包含对象的数组
echo $row-&
echo $row-&
echo &Total Results: & . $query-&num_rows();
㈡多结果标准查询(数组形式):
$query = $this-&db-&query(&SELECT name, title, email FROM my_table&);
foreach ($query-&result_array() as $row)
echo $row['title'];//上面的result_array()函数返回一个带下标的数组。
echo $row['name'];
echo $row['email'];
㈢单结果标准查询(对象形式)
$query = $this-&db-&query(&SELECT name FROM my_table LIMIT 1&);
$row = $query-&row();//row()函数返回一个对象
echo $row-&
㈣单结果标准查询(数组形式)
$query = $this-&db-&query(&SELECT name FROM my_table LIMIT 1&);
$row = $query-&row_array();//row_array()函数返回一个数组
echo $row['name'];
3、快捷查询:
㈠快捷查询类能为我们提供快速取得数据的途径:
$query = $this-&db-&get(&table_name&[,'每页的记录数(limit)','偏移值(offset)']);//执行SQL: SELECT * FROM table_name
foreach ($query-&result() as $row)
echo $row-&
$query = $this-&db-&get(&mytable&, 10, 20);//执行SQL: SELECT * FROM mytable LIMIT 20, 10
$this-&db-&get_where(&数据表名&,&WHERE从句数组&[,'每页的记录数(limit)','偏移值 (offset)']);//与$this-&db-&get();函数一样,只是它允许你在函数的第二个参数那里添加一个where从句数 组,从而不用使用db-&where()这个函数
㈡SQL语句设置函数:
$this-&db-&(&SELECT部分(返回字段列表)&[,'是否(TRUE/FALSE)用反引号保护字段和表名']);//此函数允许你在SQL查询中设置SELECT部分
$this-&db-&select(&title, content, date&);
$query = $this-&db-&get(&mytable&);
$this-&db-&select_max(&查询字段&[,'结果字段重命名']);//字段最大值
$this-&db-&select_max(&age&);
$query = $this-&db-&get(&members&);//执行SQL: SELECT MAX(age) as age FROM members
this-&db-&select_max(&age&, &member_age&);
$query = $this-&db-&get(&members&);//执行SQL: SELECT MAX(age) as member_age FROM members
$this-&db-&select_min(&查询字段&[,'结果字段重命名']);//字段最小值。与select_max()相似, 你可以选择性地给出第二个参数,用来给结果字段重命名。
$this-&db-&select_avg(&查询字段&[,'结果字段重命名']);//字段平均值
$this-&db-&select_sum(&查询字段&[,'结果字段重命名']);//字段和值
$this-&db-&from(&数据表名&);//使用了本函数后,就无需再指定$this-&db-&get(&mytable&)函数中的参数了,直接使用$this-&db-&get();即可。
$this-&db-&join(&数据表名&,&SQL关联表达式&[,'关联方式(left/right/outer/inner/left outer/right outer)']);
$this-&db-&select(&*&);
$this-&db-&from(&blogs&);
$this-&db-&join(&comments&, &comments.id = blogs.id&);
$query = $this-&db-&get();
$this-&db-&where()函数允许你使用四种方法中的一种来设置WHERE子句:
①、简单的 key/value 方法: $this-&db-&where(&name&, $name); //生成: WHERE name = &$name&
②、自定义 key/value 方法:可以在第一个参数中包含一个运算符,以便控制比较:
$this-&db-&where(&name !=&, $name);
$this-&db-&where(&id &&, $id);
③、关联数组方法: 使用这个方法时你也可以在键名中包含运算符:
$array = array(&name !=& =& $name, &id && =& $id, &date && =& $date);
$this-&db-&where($array);
$array = array(&name& =& $name, &title& =& $title, &status& =& $status);
$this-&db-&where($array);
④、自定义字符串: 手动编写子句:
$where = &name=&Joe& AND status=&boss& OR status=&active'&;
$this-&db-&where($where);
$this-&db-&where() 接受可选的第三个参数。如果你将它设置为 FALSE, CodeIgniter 将不会为你那些包含反勾号的字段名或表名提供保护。例如:$this-&db-&where(&MATCH (field) AGAINST (&value&)&, NULL, FALSE);
$this-&db-&or_where()函数与$this-&db-&where()几乎完全相同,唯一的区别是本函数生成的子句是用 OR 来连接的:
$this-&db-&where(&name !=&, $name);
$this-&db-&or_where(&id &&, $id); // 生成: WHERE name != &Joe& OR id & 50
$this-&db-&where_in(&字段名&,&包含IN结构中项目的数组&);//生成一段 WHERE field IN (&item&, &item&) 查询语句,如果合适的话,用 AND 连接起来(而相应的$this-&db-&or_where_in()函数使用 OR 连接)。
$this-&db-&where_not_in(&字段名&,&包含IN结构中项目的数组&)函数生成一段 WHERE field NOT IN (&item&, &item&) 查询语句,如果合适的话,用 AND 连接起来(而相应的$this-&db-&or_where_not_in()函数使用 OR 连接)。
$this-&db-&like(&字段名 或 以字段名为键,匹配内容为值的数组&[,
'第一个参数是字段名时该字段所匹配的字符串',
'通配符(%)位置before/after/both(默认值)'])函数允许你生成 LIKE 子句。
①、简单 key/value 方式:
$this-&db-&like(&title&, &match&); // 生成: WHERE title LIKE &%match%&
如果你多次调用本函数,那么这些条件将由 AND 连接起来(而相应的$this-&db-&or_like()函数使用 OR 连接)。
②、关联数组方式:
$array = array(&title& =& $match, &page1& =& $match, &page2& =& $match);
$this-&db-&like($array); // WHERE title LIKE &%match%& AND page1 LIKE &%match%& AND page2 LIKE &%match%&
$this-&db-&not_like()函数与$this-&db-&like()几乎完全相同,唯一的区别是它生成 NOT LIKE 语句
$this-&db-&or_not_like()函数与not_like()几乎完全相同,唯一的区别是多个实例之间是用 OR 连接起来的
$this-&db-&group_by(&字段名或包含多个字段名的一维数组&)允许你编写查询语句中的 GROUP BY 部分
$this-&db-&distinct()为查询语句添加 &DISTINCT& 关键字
$this-&db-&having(&字段名、SQL表达式或数组&[,'字段值','是否转义'])允许你为你的查询语句编写 HAVING 部分。有两种语法形式,一个或两个参数都可以:
$this-&db-&having(&user_id = 45&); // 生成: HAVING user_id = 45
$this-&db-&having(&user_id&, 45); // 生成: HAVING user_id = 45
把多个值通过数组传递过去:
$this-&db-&having(array(&title =& =& &My Title&, &id && =& $id)); // 生成: HAVING title = &My Title&, id & 45
如果你正在使用一个由CodeIgniter进行转义保护的数据库,为了避免内容转义,你可以传递可选的第三个参数,并将其设置为FALSE。
$this-&db-&or_having(&字段名、SQL表达式或数组&[,'字段值','是否转义'])与 having() 函数几乎完全一样,唯一的区别是多个子句之间是用 &OR& 分隔的。
$this-&db-&order_by(&排序的字段或ORDER BY子句&,&排序方式(asc(升序)或desc(降序)或random(随机))&)设置一个ORDER BY子句。
$this-&db-&order_by(&title&, &desc&); // 生成: ORDER BY title DESC
$this-&db-&order_by(&title desc, name asc&); // 生成: ORDER BY title DESC, name ASC
多次调用本函数就可以排序多个字段:
$this-&db-&order_by(&title&, &desc&);$this-&db-&order_by(&name&, &asc&); // 生成: ORDER BY title DESC, name ASC
$this-&db-&limit(&结果数量&[,'结果偏移量'])函数限制查询所返回的结果数量
$this-&db-&count_all_results(['数据表名'])允许你获得某个特定的Active Record查询所返回的结果数量。可以使用Active Record限制函数,例如 where(), or_where(), like(), or_like() 等等。范例:
echo $this-&db-&count_all_results(&my_table&);// 生成一个整数,例如 25
$this-&db-&like(&title&, &match&);
$this-&db-&from(&my_table&);
echo $this-&db-&count_all_results();// 生成一个整数,例如 17
4、标准插入(insert)
$sql = &INSERT INTO mytable (title, name)
VALUES (&.$this-&db-&escape($title).&, &.$this-&db-&escape($name).&)&;
$this-&db-&query($sql);
echo $this-&db-&affected_rows();
5、快捷插入(insert)
㈠插入函数:
$this-&db-&insert(&数据表名&,&关联数组或对象&);
$data = array(
&title& =& $title,
&name& =& $name,
&date& =& $date
$this-&db-&insert(&mytable&, $data); //第一个参数包含表名,第二个参数是一个包含数据的关联数组(也可以是一个对象)。
㈡SQL语句设置函数:
$this-&db-&set(&字段名(或关联数组或对象)&,&字段值&[,'是否(TRUE/FALSE)转义'])函数使您能够设置inserts(插入)或updates(更新)值
6、更新数据
$this-&db-&update(&数据表名&,&关联数组或对象&[,'WHERE子句或关联数组'])函数生成并执行一条update(更新)语句。例如:
$data = array(
&title& =& $title,
&name& =& $name,
&date& =& $date
$this-&db-&where(&id&, $id);
$this-&db-&update(&mytable&, $data);
在进行更新时,你还可以使用上面所描述的 $this-&db-&set() 函数。
7、删除数据
$this-&db-&delete(&表名或包含多个表名的数组&,&WHERE子句数组&);生成并执行一条DELETE(删除)语句。
$this-&db-&empty_table(&表名&);生成并执行一条DELETE(删除)语句。例如:
$this-&db-&empty_table(&mytable&); // 生成 DELETE FROM mytable
$this-&db-&truncate(['表名']);生成并执行一条TRUNCATE(截断)语句。
$this-&db-&from(&mytable&);
$this-&db-&truncate();
$this-&db-&truncate(&mytable&);
8、链式方法
链式方法允许你以连接多个函数的方式简化你的语法。范例:
$this-&db-&select(&title&)-&from(&mytable&)-&where(&id&, $id)-&limit(10, 20);
$query = $this-&db-&get();
链式方法只能在PHP 5下面运行。
9、Active Record缓存
缓存调用是累加的。如果你调用了两次有缓存的 select(),然后再调用两次没有缓存的 select(),这会导致 select() 被调用4次。有三个可用的缓存函数:
$this-&db-&start_cache() 开启缓存
$this-&db-&stop_cache() 停止缓存
$this-&db-&flush_cache() 清空缓存
能够被缓存的语句有: select, from, join, where, like, groupby, having, orderby, set
CodeIgniter允许你在支持事务安全的数据库表中使用事务。在MySQL中,你需要用InnoDB或BDB表而不是更常用的MyISAM。大多数其它的数据库平台都原生支持事务。
CodeIgniter的事务方法:
$this-&db-&trans_start() 启用事务。要使用测试模式只需将$this-&db-&trans_start()函数的第一个参数设置为 TRUE 即可
$this-&db-&trans_complete() 完成事务。
$this-&db-&trans_off() 禁用事务。
$this-&db-&trans_strict(FALSE); 禁用严格模式。默认情况下, CodeIgniter 以严格模式运行所有事务。当严格模式被启用时, 如果你正在运行多组的事务, 只要有一组失败, 所有组都会被回滚。如果严格模式被禁用, 每一组都被视为独立的组, 这意味着其中一个组的失败不会影响其它组。
$this-&db-&trans_status() 事务状态,执行失败返回FALSE
$this-&db-&trans_begin() 手动运行事务
$this-&db-&trans_rollback() 回滚
$this-&db-&trans_commit() 执行提交
11、表数据
$this-&db-&list_tables() 获取表信息。返回一个包含当前连接数据库中所有表名称的数组
$this-&db-&table_exists(&表名&) 判断表是否存在。返回布尔值:TRUE/FALSE。
12、字段数据
$this-&db-&list_fields(&表名&)/$query-&list_fields() 返回一个包含字段名称的数组
$this-&db-&field_exists(&字段名&,&表名&) 判断字段是否存在。返回布尔值:TRUE/FALSE。
$this-&db-&field_data(&表名&)/$query-&field_data() 返回一个包含字段名称信息的对象数组。 如果这个函数支持您的数据库,它将会返回以下数据:
name & 列名称
max_length & 列的最大长度
primary_key & 1 如果此列被定义为主键
type & 指定列的数据类型
上一页: &&&&&下一页:相关内容

我要回帖

更多关于 codeigniter实例教程 的文章

 

随机推荐