URI路由
一个典型的通配符路由看起来是这样的:
$route['product/(:num)'] = "catalog/product_lookup";
在一个路由中,数组的键包含着被匹配的URI,而数组的值包含着路由将被重定向的目的地.在上面的例子中,如果单词“product”出现在URL的第一个部分中,而且数字(:num)出现在URI的第二个部分中,"catalog"类和"product_lookup"方法将被替代使用(即将被重定向).
你可以匹配文字的值或者使用以下两种通配符类型:
:num 将匹配一个只包含有数字的segment(段).
:any 将匹配一个包含任何字符的segment.
注意: 路由将会按照定义的顺序来运行.高层的路由总是优先于低层的路由.
删除 index.php 文件
默认情况下,index.php 文件将被包含在你的 URL 中:
example.com/index.php/news/article/my_article
你可以很容易的通过 .htaccess 文件来设置一些简单的规则删除它。下面是一个例子,使用“negative”方法将非指定内容进行重定向:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
如果你的项目不在根目录请把上面这一句改为:RewriteRule ^(.*)$ index.php/$1 [L]
在上面的例子中,可以实现任何非 index.php、images 和 robots.txt 的 HTTP 请求都被指向 index.php。
创建你自己的类库
文件名首字母大写. 例如: Myclass.php
类声明首字母大写. 例如: class Myclass
类的名字和文件名应符合.
在所有的Controller 函数中,你可以用以下的标准方式初始化你的类:
$this->load->library('myclass');
当 someclass 是文件名时,不用加上".php"扩展名.这里名字不分大小写.
一旦你自定义的类加载完毕,你可以通过以下方式调用类,注意使用 小写 的名字:
$this->myclass->some_function(); // 对象的实例名永远都是小写的
调试你的应用程序
该分析器将在页面下方显示基准测试结果,运行过的 SQL 语句,以及 $_POST 数据。这些信息有助于开发过程中的调试和优化。
初始化类
注意: 此分析器无须手动初始化.如果已按照下面的方式激活,他将被输出类自动装载。
激活分析器
在控制器中设置以下方法以激活该分析器
$this->output->enable_profiler(TRUE);
分析器激活后将产生一个报告并插入您的页面底部,使用以下方法禁用该分析器:
$this->output->enable_profiler(FALSE);
辅助函数
载入辅助函数是非常简单的:
$this->load->helper('name');
name 是辅助函数文件的名字(不带.php后缀 和"helper" 部分)。
例如,要载入文件名为url_helper.php的URL Helper,你将会用到下面的语句:
$this->load->helper('url');
辅助函数可以在你的控制器(controller)的任何地方被载入,甚至可以在视图(View)文件中被载入(我们并不建议你这么做)。请在使用辅助函数之前载入他们。你可以在你的控制器构造函数中载入它们,以便辅助函数能自动在其他函数之前被载入。你也可以在要用到辅助函数的地方当场载入。
载入多个辅助函数
如果你想一次载入多个辅助函数,你可以这样做:
$this->load->helper( array('helper1', 'helper2', 'helper3') );
自动载入辅助函数
如果你想要的话,CodeIgniter可以自动为你载入辅助函数。你可以通过打开 application/config/autoload.php ,并往自动载入数组(autoload array)中增加辅助函数来实现。
管理你的应用程序
更改你的应用程序的文件夹路径
你可以将 application文件夹从system 文件夹中挪放到服务器的其他的位置。但是你还要更改 index.php 文件里将$application_folder变量设置为服务器的全路径。
$application_folder = "/Path/to/your/application";
在一个 CodeIgniter 下运行多个应用程序
如果你想要多个应用程序共享同一个 CodeIgniter, 你要将 application 下所有的文件夹放在不同的应用程序的文件夹内。
例如,你要建立两个应用程序 "foo" 和 "bar",你的应用程序文件夹的结构可能会像下面的这样:
applications/foo/
applications/foo/config/
applications/foo/controllers/
applications/foo/errors/
applications/foo/libraries/
applications/foo/models/
applications/foo/views/
applications/bar/
applications/bar/config/
applications/bar/controllers/
applications/bar/errors/
applications/bar/libraries/
applications/bar/models/
applications/bar/views/
要选择使用某个应用程序,你需要打开主 index.php 文件,并且设置 $application_folder 变量为目标路径。例如,通过如下设置,就可以选择使用 "foo" 应用程序:
$application_folder = "applications/foo";
开发规范
PHP闭合标签“?>”在PHP中对PHP的分析器是可选的。 但是,如果使用闭合标签,任何由开发者,用户,或者FTP应用程序插入闭合标签后面的空格都有可能会引起多余的输出、php错误、之后的输出无法显示、空白页。因此,所有的php文件应该省略这个php闭合标签,并插入一段注释来标明这是文件的底部并定位这个文件在这个应用的相对路径。这样有利于你确定这个文件已经结束而不是被删节的。
INCORRECT: <?php echo "Here's my code!"; ?>
CORRECT: <?php echo "Here's my code!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
类名的首字母应该大写。如果名称由多个词组成,词之间要用下划线分隔,不要使用骆驼命名法。类中所有其他方法的名称应该完全小写并且名称能明确指明这个函数的用途,最好用动词开头。尽量避免过长和冗余的名称
不当的: class superclass , class SuperClass
适当的: class Super_class
不当的和适当的方法名称的示例:
不当的:
function fileproperties() // 方法名没有清晰的描述以及下划线分割单词
function fileProperties() // 方法名没有清晰的描述以及使用了驼峰法命名function getfileproperties() // 还可以!但是忘记了下划线分割单词
function getFileProperties() // 使用了驼峰法命名
function get_the_file_properties_from_the_file() // 方法名太冗长
适当的:
function get_file_properties() // 清晰的方法名描述,下划线分割单词,全部使用小写字母
变量的命名规则与方法的命名规则十分相似。就是说,变量名应该只包含小写字母,用下划线分隔,并且能适当地指明变量的用途和内容。那些短的、无意义的变量名应该只作为迭代器用在for()循环里。
常量命名除了要全部用大写外,其他的规则都和变量相同。在适当的时候,始终使用CodeIgniter常量,例如MY_NAME , LASH, LD, RD, PATH_CACHE等等.
比较返回值与类型映射
不当的:
if (strpos($str, 'foo') == FALSE) // 如果 'foo' 位于此字符串的起始处,strpos将返回 0,// 此处条件判断的结果为TRUE
恰当的:
if (strpos($str, 'foo') === FALSE)
你的附加组件所用到的任何表都必须使用 'exp_' 这个前缀,然后是一个能够唯一标识开发者或公司的前缀,最后才是一个简短的描述性的表名。你不需要担心用户安装时所使用的数据库前缀,因为CodeIgniter的数据库类将根据实际情况自动地对 'exp_' 进行转换。
不当的:
email_addresses // 缺少这两个前缀
pre_email_addresses // 缺少 exp_ 前缀
exp_email_addresses // 缺少唯一前缀
恰当的:
exp_pre_email_addresses
使用 Allman 风格缩进。除了类声明以外,括号总是独占一行,且缩进与“属于”它的控制语句同级。
恰当的:
function foo($bar)
{
// ...
}
if ($foo == $bar)
{
// ...
}
else {
// ...
}
私有方法和变量
如果方法和变量只在类的内部使用,应当使用下划线作为前缀。
convert_text() // public method
_convert_text() // private method
一直使用单引号除非你需要解析变量,如果需要解析变量请使用大括号, to prevent greedy token parsing. 如果字符串包含单引号的话你可以使用双引号,这样就不用转义了。
INCORRECT:
"My String" // 没有解析变量,不需要使用双引号
"My string $foo" // 解析变量需要使用括号
'SELECT foo FROM bar WHERE baz = \'bag\'' // 需要转义单引号''时这样写比较难看,可以使用双引号
CORRECT:
'My String'
"My string {$foo}"
"SELECT foo FROM bar WHERE baz = 'bag'"
SQL 查询
MySQL 的关键字一直大写: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN等等考虑到易读性,请将从句句分成多行来写。
CORRECT:
$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
FROM exp_pre_email_addresses
WHERE foo != 'oof' AND baz != 'zab'
ORDER BY foobaz
LIMIT 5, 100");
控制器
将 URI 片段传递给方法
如果你的 URI 超过两个部分,那么超过的将被作为参数传递给方法。举例来说,如果你的 URI 是这样的:
example.com/index.php/products/shoes/sandals/123 ,URI 的第3和第4部分会被传递给你的方法(“arg1” 和 “arg2”):
上面的方法调用时必须给两个相应的参数,要不然会出错。当然你也可以像下面这样写,就不用在调用的时候给参数了!
function shoes($arg1='Test', $arg2=1)
{
echo $arg1;//sandals
echo $arg2; //123
}
重新定义方法的调用规则
被重新定义的方法调用方式(一般是 URI 中的第二片段)将作为一个参数传递给 _remap():
public function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->comments();
}
}
模型
模型可以在 controller 中被引用。就像这样:
$this->load->model('Model_name');
$this->Model_name->function();
在默认的情况下模型名称就直接被引入作为对象名,就如上面所示。当然,如果你愿意,可以起个更好记的对象名!那么,可以在加载模型函数中指定第二个参数来设定,例如:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
视图
获取视图内容
view函数第三个可选参数可以改变函数的行为,让数据作为字符串返回而不是发送到浏览器。如果想用其它方式对数据进一步处理,这样做很有用。如果将view第三个参数设置为true(布尔)则函数返回数据。view函数缺省行为是 false, 将数据发送到浏览器。如果想返回数据,记得将它赋到一个变量中:
$string = $this->load->view('myfile', '', true);
网页缓存
启用缓存功能,只需要将下面的代码放入你的任何一个控制器(controller)的方法(function)内: $this->output->cache(n);
其中 n 是你希望缓存更新的 分钟 数。可以使用 m/60 来精确到秒,例如 1/60 ,则是精确到 1秒。
警告:由于CI存储缓存文件的方式,只有通过 view 文件的输出才能被缓存。
相关推荐
我个人觉得在当前 MVC 流行的架构下,要想去了解一个框架,或者是一个基于此架构下的应用程序,最好的入手方式就是先看路由,虽然路由不是 MVC 里的任何一个,但是知道了路由的来龙去脉就知道了整个框架或者是应用的...
#### 1. 入口文件(index.php) 在CodeIgniter框架中,所有的HTTP请求都会通过入口文件(index.php)进行处理。该文件扮演了整个应用的“门面”,负责初始化整个应用并引导程序的执行流程。 - **定义变量**:index...
笔记扫描版本
其实一开始我是很纠结是否要写控制器的源码分析的,因为控制器的源码太少了,少到你不相信这是一个 MVC 里的一个重头。直觉里,大家都觉得控制器作为各个请求的“入口”,其后端应该有很多很多的代码支撑才可以的,...
Codeigniter.php 是 CI 4 的核心所在,在这里接收并处理了 request 请求,安全检查,缓存处理, URL 解析以及路由匹配,执行过滤器,加载运行 Controller ,组装 repsonse 响应并发送等。
本文将详细介绍CodeIgniter框架中关于数据库操作的一些常用函数和特性。 数据库自动连接是使用CodeIgniter框架进行数据库操作的第一步。在CodeIgniter中,你可以通过修改配置文件`application/config/autoload.php`...
1. `composer.json`:这是Composer的配置文件,Composer是PHP的一个依赖管理工具,用于管理和安装项目所需的库和依赖。在这个项目中,它可能列出了CodeIgniter框架和其他第三方库的版本和依赖关系。 2. `index....
在第1讲中,我们会了解到如何安装和设置CodeIgniter环境,以及如何创建第一个简单的控制器和视图,这将是构建留言板的基础。 在第2讲中,我们将具体学习如何利用CI编写一个基本的留言板应用。这通常涉及创建一个...
Codeigniter 3迁移示例 迁移是一种在多个开发环境中管理...笔记 001_add_users.php:为了快速开发,您可以从phpmyadmin或sqlyog等生成sql代码 002_add_contact.php:这是面向框架的方式,并且肯定会花费一些时间。
一个基于CodeIgniter 4PHP Application Starter,版本5项目资料库笔记该启动器支持多个应用程序。 在尝试运行此启动程序之前,请使用您的特定设置创建自己的.env文件。PHP 如果您是初学者,几乎没有PHP经验,或者您...
CI 为了追上“大家”的脚步,这次跨了一大步,尽量使用了更多的流行设计理念,甚至连 PHP 的支持版本都是从 7 开始起步的。我在之前阅读源码的同时也发现了很多变化的地方,在此把已经发现的列举出来,不过肯定是不...
2. PHP框架:探讨常见的PHP框架,如Laravel、Symfony、CodeIgniter等,理解框架的原理和优势。 3. RESTful API设计:学习如何使用PHP构建符合RESTful原则的Web服务接口。 4. PHP安全:探讨防止SQL注入、XSS攻击、...
基于CodeIgniterPHP应用程序入门版本3项目资料库笔记这是平台的较旧版本。 将在支持多个应用程序的Application Starter 4上做进一步的努力。 参见PHP 如果您是初学者,几乎没有PHP经验,或者您没有PHP经验,则可能...
7. **Web框架和库**:可能涉及一些流行的PHP框架,如Laravel、Symfony或CodeIgniter,以及使用PHPMailer发送邮件等实用库。 此外,笔记可能还会涵盖Web服务器配置、PHP配置、安全实践、性能优化等进阶话题。通过...
规格: 代码点火器 v3 引导程序 4 Jquery 数据表Ion Auth Codeigniter Sweetalert2 夏日笔记步骤配置: 创建名为 db_blog 的数据库将文件夹数据库中的文件导入到 phpmyadmin 完毕如何以管理员身份登录: 使用“/...
aad-sso-codeigniter 使用... 笔记: 该库使用CodeIgniter的。 这意味着必须配置该库以供使用。 (例如,如果使用,则必须设置目录。) 重要说明:这是一项正在进行的工作。 您不应将其用于任何生产站点或敏感信息。
这是我在学习 codeigniter 时创建的。 要运行此应用程序,您需要做的是: 创建一个名为:jrdash 的数据库 使用此处包含的文件 jrdash.sql 将表导入到上面创建的数据库中 根据你的配置编辑 jrdash\application\...