CodeIgniter315

ߣadmin
Դ未知 ڣ2019-08-04 16:23 ()

  简而言之,一个控制器就是一个类文件,是以一种能够和 URI 关联在一起的方式来命名的。

  上例中,CodeIgniter 将会尝试查询一个名为 Blog.php 的控制器并加载它。

  接下来你会看到如何创建一个简单的控制器,打开你的文本编辑器,新建一个文件 Blog.php , 然后放入以下代码:

  CodeIgniter 可以设置一个默认的控制器,当 URI 没有分段参数时加载,例如当用户直接访问你网站的首页时。 打开application/config/routes.php文件,通过下面的参数指定一个默认的控制器:

  其中,“Blog”是你想加载的控制器类名,如果你现在通过不带任何参数的 index.php 访问你的站点,你将看到你的“Hello World”消息。

  正如上文所说,URI 的第二段通常决定控制器的哪个方法被调用。CodeIgniter 允许你使用_remap()方法来重写该规则:

  如果你的控制包含一个 _remap() 方法,那么无论 URI 中包含什么参数时都会调用该方法。 它允许你定义你自己的路由规则,重写默认的使用 URI 中的分段来决定调用哪个方法这种行为。

  被重写的方法(通常是 URI 的第二段)将被作为参数传递到_remap()方法:

  方法名之后的所有其他段将作为_remap()方法的第二个参数,它是可选的。这个参数可以使用 PHP 的call_user_func_array()函数来模拟 CodeIgniter 的默认行为。

  CodeIgniter 有一个输出类,它可以自动的将最终数据发送到你的浏览器。 更多信息可以阅读视图输出类页面。但是,有时候, 你可能希望对最终的数据进行某种方式的后处理,然后你自己手工发送到浏览器。CodeIgniter 允许你向你的控制器中添加一个_output()方法,该方法可以接受最终的输出数据。

  如果你的控制器含有一个_output()方法,输出类将会调用该方法来显示数据, 而不是直接显示数据。该方法的第一个参数包含了最终输出的数据。

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

  如果你在使用_output()时,希望获取页面执行时间和内存占用情况,结果可能会不准确, 因为并没有统计你后加的处理代码。另一个可选的方法是在所有最终输出之前来进行处理, 请参阅输出类。

  有时候你可能希望某些方法不能被公开访问,要实现这点,只要简单的将方法声明为 private 或 protected , 这样这个方法就不能被 URL 访问到了。例如,如果你有一个下面这个方法:

  为了向后兼容原有的功能,在方法名前加上一个下划线前缀也可以让该方法无法访问。

  如果你正在构建一个比较大的应用,那么将控制器放到子目录下进行组织可能会方便一点。CodeIgniter 也可以实现这一点。

  你只需要简单的在application/controllers/目录下创建新的目录,并将控制器文件放到子目录下。

  当使用该功能时,URI 的第一段必须指定目录,例如,假设你在如下位置有一个控制器:

  如果你需要在你的类被初始化时设置一些默认值,或者进行一些默认处理,构造函数将很有用。 构造函数没有返回值,但是可以执行一些默认操作。

  因为你的控制器将继承主程序的控制器,在新建方法时你必须要小心不要使用和父类一样的方法名, 要不然你的方法将覆盖它们,参见保留名称。

  另外,你也绝对不要新建一个和类名称一样的方法。如果你这样做了,而且你的控制器 又没有一个__construct()构造函数,那么这个和类名同名的方法Index::index()将会作为类的构造函数被执行!这个是 PHP4 的向前兼容的一个特性。

ܻϲ
Ƽ