php-codeIgniter

安装

前往官网下载最新版本并解压至服务器文件夹。

主题

控制器

url分段

example.com/class/function/ID

  1. 第一段表示要调用的控制器;(文件夹:application/controllers

  2. 第二段表示要调用类中的指定函数方法

  3. 第三段及其后面所有代表传给控制器的参数。

隐藏url中的index.php

默认情况下,url会包含index.php,如果你的服务器是使用Apache,且启用了mod_rewrite,则可以在项目的根目录添加一个.htaccess文件,里面内容:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt) 	# 这里写要排除的资源
RewriteRule ^(.*)$ index.php/$1 [L]

启用查询字符串

application/config.php 配置文件中启用它。 打开你的配置文件,查找下面这几项:

enable_query_strings设置为true,设置后,url格式变成:index.php?c=controller&m=method。其中controller是控制器的类名,method是要执行的方法名。

处理输出

控制器里创建一个_output()方法,它会将数据的最终状态发送到浏览器。

当数据传到 _output() 方法时,数据已经是最终状态。这时基准测试和计算内存占用都已经完成, 缓存文件也已经写到文件(如果你开启缓存的话),HTTP 头也已经发送。 为了使你的控制器能正确处理缓存,_output() 可以这样写:

私有方法

将方法声明为 private 或 protected,在方法名前加上一个下划线前缀也可以让该方法无法访问。

构造函数

当有需要在控制器中使用构造函数时,需要用代码覆盖父类的构造函数,需要手工调用它

视图

创建与加载视图

application/views/创建一个php文件,里面写html内容,在控制器里使用下面的方法来加载指定视图

name参数是视图的文件名。

向视图添加动态数据

在上面加载视图的方法的第二个参数,可以像视图动态传入数据,这个参数可以使数组或者对象

在视图文件写入数组相对于的变量

循环

用于在视图页面循环一个多维数组

在视图页面展开循环

模型

创建模型

application/models/目录下创建模型php文件

文件名和类名应该一致,如上方的模型,其文件名应该为Model_name.php

加载模型

控制器的方法中加载和调用

如果你有一个模型需要在整个应用程序中使用,需要在CodeIgniter初始化的时候就自动加载它,需要在application/config/autoload.php文件将该模型添加到autoload['model']数组中。

辅助函数

辅助函数参考

加载辅助函数

控制器使用下面的方法加载辅助函数

如果有辅助函数需要在整个应用程序中使用,在application/config/autoload.php中的$autoload['helper']添加它们。

扩展辅助函数

application/helpers/目录下新建一个文件,文件名以MY_开头,以_helper结尾。

开头的MY_可以通过配置项$config['subclass_prefix']进行修改。

例如,写一个数组判断的辅助函数,创建文件application/helpers/MY_array_helper.php

CodeIgniter类库

类库参考

加载类库

使用控制器初始化:

创建类库

除了数据库类不能被扩展和替换以外,其他的类都可以。

新建的类库文件需要存储在application/libraries目录下。

命名约定

  • 文件名首字母需要大写;

  • 类名首字母需要大写;

  • 类名和文件名必须一致。

控制器加载上面的那个自己创建的类

加载后,即可使用小写字母命名的方式来访问你的类

如果需要在类库初始化传入参数,可以通过第二个参数动态传递一个数组。

如果你使用了该功能,你必须在定义类的构造函数时加上参数:

在创建的类库中使用CodeIgniter资源

在一般情况下,在控制器里使用CodeIgniter原生资源会使用$this来调用,但是如果要在自己创建的类中使用Codeigniter资源,则需要通过get_instance()函数来访问。将这个函数赋值给一个变量后,就可以用这个变量代替$this

你会看到上面的 get_instance() 函数通过引用来传递:

这是非常重要的,引用赋值允许你使用原始的 CodeIgniter 对象,而不是创建一个副本。

使用新建的类库替换原生类库

简单的将你的类文件名改为和原生的类库文件一致,CodeIgniter 就会使用它替换掉原生的类库。 要使用该功能,你必须将你的类库文件和类定义改成和原生的类库完全一样,例如, 要替换掉原生的 Email 类的话,你要新建一个 application/libraries/Email.php 文件, 然后定义定义你的类:

注意大多数原生类都以 CI_ 开头。

要加载你的类库,和标准的方法一样:

注意数据库类不能被你自己的类替换掉。

扩展原生类库

在扩展类的时候需要注意:

  • 类的定义时需要继承它的父类

  • 新的类名和文件名需要以MY_为前缀(可通过配置项$config['subclass_prefix']进行修改)

例如,要扩展原生的 Email 类你需要新建一个文件命名为 application/libraries/MY_Email.php , 然后定义你的类:

如果你需要在你的类中使用构造函数,确保你调用了父类的构造函数:

并不是所有的类库构造函数的参数都是一样的,在对类库扩展之前 先看看它是怎么实现的。

加载扩展的类

要加载你的扩展类,还是使用和通常一样的语法。不用包含前缀。例如, 要加载上例中你扩展的 Email 类,你可以使用:

资源自动加载

  • libraries/ 目录下的核心类

  • helpers/ 目录下的辅助函数

  • config/ 目录下的用户自定义配置文件

  • system/language/ 目录下的语言文件

  • models/ 目录下的模型类

修改配置文件application/config/autoload.php,将其数组添加你要自动加载的资源。

另外,如果你想让 CodeIgniter 使用 Composer 的自动加载, 只需将 application/config/config.php 配置文件中的 $config['composer_autoload'] 设置为 TRUE 或者设置为你自定义的路径。

小技巧

引用静态资源

将需要引用的静态资源放在根目录,设置CI框架的base_url,设置自动加载url辅助函数。

然后就可以在视图文件里进行引入:

使用Redis

配置文件application/config/config.php中的$config['sess_driver']修改为redis

application/config/目录下创建一个名为redis.php配置文件,可用参数如下:

使用方法例子

引用composer安装的库

在项目跟目录下载号需要安装的包后,需要修改application/config/config.php里面的$config['composer_autoload'],指向vendor文件夹的autoload.php文件。

然后在你需要用到这个库的控制器使用就可以了。

部署CI框架的项目到服务器后遇到的问题

提示session路径错误

前往config.php文件内将$config['sess_save_path'] = NULL;修改为$config['sess_save_path'] = sys_get_temp_dir();

访问CI接口404

设置伪静态:

或者

通过axios使用post方式提交的错误

当前端项目是使用axios时,通过post提交数据到CI框架的后台时,后台通过$_POST将接收不到这些数据,原因是:

当我们使用axios时,axios将会帮我们将请求数据响应数据将会自动转换为JSON数据。这时,我们的请求中的Content-Type会变成application/json;charset=utf-8。因为我们的参数是 JSON 对象,axios 帮我们做了一个 stringify 的处理。

然而,我们服务端的要求是Content-Type': 'application/x-www-form-urlencoded,所以是接收不到前端发送的数据的。

解决方式1:使用URLSearchParams 传参

使用URLSearchParams对URL进行字符串处理,需要注意的是,IE浏览器不支持这个api

解决方式2:使用transformRequest转换数据

解决方式3:通过字符串拼接的方式传参

修改开发/线上环境

根据当前环境是“开发环境”或是“线上环境”以处理程序异常时是否抛出错误信息。

修改.htaccess文件

具体错误信息处理,可在index.php文件头部进行处理

部署线上环境后提示system文件指向错误

在IIS服务器上遇到过这个问题,部署完成后提示:Your system folder path does not appear to be set correctly. Please open the following file and correct this: index.php

可将CI根目录的index.php文件的两个路径指向更改为:

Last updated

Was this helpful?