装载类
装载,顾名思义,是用来装载元素。这些元素可以是库 (类) 视图文件, 辅助函数, 模型, 或者是你自己的文件。
提示: 这个类是由系统初始化的,所以,没有必要自己手动初始化。
以下为这个类里面的函数:
$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');
你可以随心所欲地将文件保存到多层的子目录下。
设置选项
第二个参数是可选的,作用是允许你有选择性地传递配置参数。一般来说你可以将参数以数组的形式传递过去:
$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()相同的结果 .你之所以要单独用这个函数也许是因为,你想在控制器的构造函数中设置一些全局变量,以使这些变量在任意函数调用的视图(view)里能够用上.你能多次调用这个函数.数组数据被缓存并被并入一个数组,用来转化成变量.
$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() 的一个别名。
Application "Packages"
An application package allows for the easy distribution of complete sets of resources in a single directory, complete with its own libraries, models, helpers, config, and language files. It is recommended that these packages be placed in the application/third_party folder. Below is a sample map of an package directory
Sample Package "Foo Bar" Directory Map
The following is an example of a directory for an application package named "Foo Bar".
/application/third_party/foo_bar
config/
helpers/
language/
libraries/
models/
Whatever the purpose of the "Foo Bar" application package, it has its own config files, helpers, language files, libraries, and models. To use these resources in your controllers, you first need to tell the Loader that you are going to be loading resources from a package, by adding the package path.
$this->load->add_package_path()
Adding a package path instructs the Loader class to prepend a given path for subsequent requests for resources. As an example, the "Foo Bar" application package above has a library named Foo_bar.php. In our controller, we'd do the following:
$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
$this->load->library('foo_bar');
$this->load->remove_package_path()
When your controller is finished using resources from an application package, and particularly if you have other application packages you want to work with, you may wish to remove the package path so the Loader no longer looks in that folder for resources. To remove the last path added, simply call the method with no parameters.
$this->load->remove_package_path()
Or to remove a specific package path, specify the same path previously given to add_package_path() for a package.:
$this->load->remove_package_path(APPPATH.'third_party/foo_bar/');
Package view files
@todo - package view file interface is not complete. It can be experimentally used by first saving the Loader's original view path, setting the view path to the package's view path, and when finished, setting back to the original view path.
// ... save the original view path, and set to our Foo Bar package view folder
$orig_view_path = $this->load->_ci_view_path;
$this->load->_ci_view_path = APPPATH.'third_party/foo_bar/views/';
// ... code using the package's view files
// ... then return the view path to the application's original view path
$this->load->_ci_view_path = $orig_view_path;