装载器类

优质
小牛编辑
130浏览
2023-12-01

装载,顾名思义,是用来装载元素。这些元素可以是库 (类) 视图文件, 辅助函数, 模型, 或者是你自己的文件。

提示: 这个类是由系统初始化的,所以,没有必要自己手动初始化。

以下为这个类里面的函数:

$this->load->library('class_name', $config, 'object name')

这个函数是用来加载核心类。class_name 是你要加载的类的名称。 提示: “类”和“库”是可替换使用的。

比如,你想用 CodeIgniter 来发送邮件,第一步就是在你的控制器里加载 email 类。

$this->load->library('email');

一旦被加载,就可以使用该类了, 使用 $this->email->some_function()

类库文件可以被保存到主libraries目录的子目录下面,或者保存到个人的application/libraries 目录下。 要载入子目录下的文件,只需将路径包含进来就可以了,注意这里说的路径是指相对于libraries目录的路径。 例如,当你有一个文件保存在下面这个位置:

libraries/flavors/chocolate.php

你应该使用下面的方式来载入它:

$this->load->library('flavors/chocolate');

你可以随心所欲地将文件保存到多层的子目录下。

另外,你可以同时加载多个类(库),只要按照下面的代码为load方法传入一个包含所有要载入的类名的数组即可:

$this->load->library(array('email', 'table'));

设置选项

第二个参数是可选的,作用是允许你有选择性地传递配置参数。一般来说你可以将参数以数组的形式传递过去:

$config = array (
                  'mailtype' => 'html',
                  'charset'  => 'utf-8,
                  'priority' => '1'
               );

$this->load->library('email', $config);

配置参数通常也可以保存在一个配置文件中。每个类库在其各自的页面中都有详细的说明,所以在使用类库之前,你必须认真阅读它们的说明。

请注意,当第一个参数使用数组来同时载入多个类时,每个类将获得相同的参数信息。

给类库分配不同的对象名

第三个参数也是可选的,如果为空,类库通常就会被赋值给一个与类库同名的对象。例如,如果类库名为 Session, 它将会被赋值给一个名为 $this->session 的变量。

如果你希望使用你的自定义名称,你可以通过第三个参数把它传递过去:

$this->load->library('session', '', 'my_session');

// Session 类现在可以通过下面的方式访问:

$this->my_session

请注意,当第一个参数使用数组来同时载入多个类时,第三个参数将不起作用。

$this->load->view('file_name', $data, true/false)

这个函数是用来加载你的视图文件。 如果你尚未阅读本手册视图 章节的话,建议你先去阅读那里的内容,会有更详细的函数使用说明.

第一个参数是必须的. 指定你要载入的视图文件的名称.  注意: 无需加上 .php 扩展名,除非你使用了其他的扩展名。

第二个参数 optional 允许你传入数组或对象, 传入的数组或对象将使用 php extract 函数导出,你可以在视图中任意使用这些导出的变量. 此外,请阅读 视图 章节了解该功能的更多用法.

第三个参数是可选的,作用是改变函数的运行方式,将数据以字符串的形式返回,而不是发送给浏览器。当你希望用不同的方式处理数据时,这个参数就非常有用。如果你将这个参数设置为 true (布尔型),函数就会返回数据。这个参数的默认值是 false, 也就是数据将会被发送给浏览器。如果你希望数据被返回,记得要将它赋值给一个变量:

$string = $this->load->view('myfile', '', true);

$this->load->model('Model_name');

$this->load->model('Model_name');

如果你的模型位于models目录的子目录下,那么,相对路径也必须被包含进来。例如,如果你有一个模型位于 application/models/blog/queries.php ,你应该使用下面的语句来载入它:

$this->load->model('blog/queries');

如果你希望给模型赋予一个你自定义的对象名,请在函数的第二个参数中给出你自定义的名称:

$this->load->model('Model_name', 'fubar');

$this->fubar->function();

$this->load->database('options', true/false)

这个函数的作用是载入数据库类。这两个参数都是可选的。请查看 数据库 段落以获取更多信息。

$this->load->vars($array)

这个函数以一个关联数组作为输入参数,将这个数组用PHP的extract函数转化成与之对应的变量。这个方法的结果与上面的$this->load->view()方法使用第二个参数的结果一样。在后面提到的情况下你可能需要单独使用这个函数:假如你想在控制器的构造函数中定义一些全局变量,并希望这些变量在控制器的每一个方法加载的视图文件中都可用。你可以多次调用该方法,数据将被缓存,并被合并为一个数组,以便转换成变量。

$this->load->get_var($key)

该方法检查关联数组中的变量对你的视图是否可用。当一个变量在一个类(库)或者控制器的另一个方法里被以这样的方式定义时:$this->load->vars(),会做这样的检查。

$this->load->helper('file_name')

这个函数的作用是载入辅助函数, file_name 是辅助函数对应的文件名,不包括 _helper.php 扩展名。

$this->load->file('filepath/filename', true/false)

这是一个通用的文件载入函数。在第一个参数中给出文件所在的路径和文件名,对应的文件将会被打开。默认情况下,数据会被发送给浏览器,就如同视图文件一样,但如果你将第二个参数设置为 true (布尔型) 那么数据就会以字符串的形式被返回,而不是发送给浏览器。

$this->load->language('file_name')

这个函数是 语言加载函数: $this->lang->load() 的一个别名。

$this->load->config('file_name')

这个函数是 配置文件加载函数: $this->config->load() 的一个别名。

应用程序包(Package)

应用程序包(Package)可以很便捷的将你的应用部署在独立的目录中,以实现自己整套的类库,模型,辅助函数,配置,文件和语言包。建议将这些应用程序包被放置在application/third_party文件夹。下面是一个简单应用程序包的目录

简单应用程序包"Foo Bar"的目录

下面是一个名为"Foo Bar"的应用程序包目录的例子。

/application/third_party/foo_bar

config/
helpers/
language/
libraries/
models/

无论应用程序包是为了实现什么样的目的,它都包含属于自己的配置文件、辅助函数、语言包、类库和模型。在你的控制器里使用这些资源,你首先需要告知加载器(Loader)从应用程序包加载资源、添加包路径。

$this->load->add_package_path()

添加包指示加载器类使用给定的路径用以请求后续的资源。例如, "Foo Bar"应用程序包里有一个名为foo_bar.php的类.在控制器中,我们可以按照如下的方法调用:

$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
$this->load->library('foo_bar');

$this->load->remove_package_path()

当你的控制器完成从应用程序包中调取资源,特别是如果你需要调用其他的应用程序包的资源,你会希望删除当前使用的包路径来让加载器不在使用这个文件夹中的资源。要删除的最后一个使用的包路径,你可以调用不带参数的方法。

$this->load->remove_package_path()

或者删除一个特定的包路径,指定与之前使用add_package_path所加载的包相同的路径。:

$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');

包的视图文件

默认情况下,包视图文件的路径是在add_package_path()方法被调用时就已经设置了。视图路径通过循环匹配来确定视图的加载。

在这种情况下,它可能在包内产生视图命名冲突,并可能导致包被错误的加载。为了确保不会发生此类问题,在调用add_package_path()方法时可设置一个可选的第二个参数FALSE

$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Will not load the default welcome_message b/c the second param to add_package_path is TRUE

// Reset things
$this->load->remove_package_path(APPPATH.'my_app');

// Again without the second parameter:
$this->load->add_package_path(APPPATH.'my_app', TRUE);
$this->load->view('my_app_index'); // Loads
$this->load->view('welcome_message'); // Loads