处理程序
简介
Fuel 能让你包裝目录和档案在物件中。透過这樣做,
它能让你在一个 OO 基础上存取及修改档案系统項目(档案及目录)。
接收自 File 类別(或档案區域)的物件是档案处理程序。Fuel
有兩个核心档案处理程序:档案处理程序 以及 目录处理程序。
就像你所期望的,这些类別处理档案和目录。
主題
用法
每个輔助类別帶有一組方法,
能让你對包裝在档案或目录中的物件执行操作。这裡是一些使用
File::get 的範例:
// 首先我們会取得一个档案
$file = \File::get(DOCROOT.'/here_is_my/textfile.txt');
现在我們已经取得档案处理程序,我們可以使用它的方法來完成某事。
// 让我們重新命名它。
$file->rename('new_name');
// 取得档案的內容
$content = $file->read();
// 并且改回原來的名稱
$file->rename('textfile');
正如你可以在上面的例子看到,重新命名文件時,你不需要重新取回該处理程序。
你可以一遍又遍地重複使用相同物件,直到你刪除該档案或清除該變数。
档案处理程序
档案处理程序处理與档案的基础互动。每个範例都假設
$handler 變数是取回的处理程序。想知道如何取得处理程序?
請看用法段落。
forge($path, $config = array(), $area = null, $content = array())
forge 方法回傳一个新的 File_Handler_File 物件。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$path |
必要 |
指向档案的路徑 |
$config |
array() |
選擇性的配置陣列 |
$area |
null |
File_Area 實例 |
$content |
陣列 |
忽略 |
|
回傳 |
回傳一个新的 File_Handler_File 物件。 |
範例 |
$handler = File_Handler_File::forge('path/to/file.txt', $config_array, $my_file_area);
|
read($as_string = false)
read 方法是 File::read 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$as_string |
false |
設为 true 以使用 file_get_contents() 而不是 readfile() |
|
回傳 |
回傳 IO 或字串(档案內容) |
範例 |
$file_content = $handler->read(true);
|
rename($new_name, $new_extension = false)
rename 方法是 File::rename 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_name |
必要 |
新档案名稱 |
$new_extension |
false |
新副档名 |
|
回傳 |
布林,來自 rename() 的結果 |
範例 |
$handler->rename('new_name');
|
move($new_path)
move 方法是 File::move 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_path |
必要 |
指向新目录的路徑,必須是有效的 |
|
回傳 |
布林,來自 rename() 的結果 |
範例 |
$handler->move(DOCROOT.'/new/parent/directory/');
|
copy($new_path)
copy 方法是 File::copy 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_path |
必要 |
指向要複製目录到的路徑,必須是有效的 |
|
回傳 |
布林,來自 copy() 的結果 |
範例 |
$handler->copy(DOCROOT.'/directory/');
|
update($new_content)
update 方法是 File::update 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_content |
必要 |
新的档案內容 |
|
回傳 |
true 在成功時 |
範例 |
$handler->update('the new content');
|
delete()
delete 方法是 File::delete 的捷徑。
靜態 |
否 |
回傳 |
布林,來自 unlink() 的結果 |
範例 |
$handler->delete();
|
get_url()
get_url 方法是 File::get_url 的捷徑。
靜態 |
否 |
回傳 |
公開 URL |
範例 |
$url = $handler->get_url();
|
get_permissions()
get_permissions 方法是 File::get_permissions 的捷徑。
靜態 |
否 |
回傳 |
八進位制的档案權限 |
範例 |
$permissions = $handler->get_permissions();
|
get_time($type = 'modified')
get_time 方法是 File::get_time 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$type |
'modified' |
需要被回傳的時間。只能是 created 或 modified。 |
|
回傳 |
档案的建立或修改時間戳記 |
範例 |
$created_at = $handler->get_time('created');
$modified_at = $handler->get_time('modified');
// 或简寫
$modified_at = $handler->get_time();
|
get_size()
get_size 方法是 File::get_size 的捷徑。
靜態 |
否 |
回傳 |
档案大小(位元組) |
範例 |
$file_size = $handler->get_size();
|
get_path()
get_path 方法回傳档案路徑。
靜態 |
否 |
回傳 |
档案路徑 |
範例 |
$file_path = $handler->get_path();
// 回傳 "/path/to/file.txt"
|
目录处理程序
目录处理程序处理與目录的基础互动。每个範例都假設
$handler 變数是取回的处理程序。想知道如何取得处理程序?
請看用法段落。
forge($path, $config = array(), $area = null, $content = array())
forge 方法回傳一个新的 File_Handler_Directory 物件。
靜態 |
是 |
參数 |
參数 |
預設 |
描述 |
$path |
必要 |
指向目录的路徑 |
$config |
array() |
選擇性的配置陣列 |
$area |
null |
File_Area 實例 |
$content |
陣列 |
目录的內容 |
|
回傳 |
回傳一个新的 File_Handler_File 物件。 |
範例 |
$handler = File_Handler_Directory::forge('path/to/dir');
|
read($depth = 0, $filters = null)
read 方法是 File::read_dir 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$depth |
0 |
要遞迴目录的深度,1 是只有目前,而 0 或更小是無限 |
$filters |
null |
局部正規表達式的陣列,或預設的非陣列 |
|
回傳 |
回傳目录內容在一个陣列中 |
範例 |
$cir_contents = $handler->read();
|
rename($new_name)
rename 方法是 File::rename_dir 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_name |
必要 |
新目录名稱 |
|
回傳 |
布林,來自 rename() 的結果 |
範例 |
$handler->rename('new_name');
|
move($new_path)
move 方法是 File::move 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_path |
必要 |
指向新目录的路徑,必須是有效的 |
|
回傳 |
布林,來自 rename() 的結果 |
範例 |
$handler->move(DOCROOT.'/new/parent/directory/');
|
copy($new_path)
copy 方法是 File::copy_dir 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$new_path |
必要 |
指向要複製目录到的路徑,必須是有效的 |
|
回傳 |
布林,來自 copy() 的結果 |
範例 |
$handler->copy(DOCROOT.'/directory/');
|
delete($recursive = true, $delete_top = true)
delete 方法是 File::delete_dir 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$recursive |
true |
是否也刪除子目录內容 |
$delete_top |
true |
是否在为空時刪除上層目录 |
|
回傳 |
true 在成功時 |
範例 |
$handler->delete();
|
get_permissions()
get_permissions 方法是 File::get_permissions 的捷徑。
靜態 |
否 |
回傳 |
八進位制的目录權限 |
範例 |
$permissions = $handler->get_permissions();
|
get_time($type = 'modified')
get_time 方法是 File::get_time 的捷徑。
靜態 |
否 |
參数 |
參数 |
預設 |
描述 |
$type |
'modified' |
需要被回傳的時間。只能是 created 或 modified。 |
|
回傳 |
目录的建立或修改時間戳記 |
範例 |
$created_at = $handler->get_time('created');
$modified_at = $handler->get_time('modified');
// 或简寫
$modified_at = $handler->get_time();
|
撰寫处理程序
正如前面所提到,Fuel 帶有兩个預定義的处理程序。一个用於目录以及一个用於档案。
透過撰寫你自己的处理程序,你可以改變行为并且藉由档案类型添加相應功能。
例如处理 csv 文件時,你可能希望在讀取時自动解析他們,
或可以從一个圖像档案取回圖像。
如何撰寫他們……
处理程序是擴充 File Handler 类別(\File_Handler_File)的类別。
这裡是一个範例:
<?php
class File_Handler_XML extends \File_Handler_File
{
/**
* Read 方法指定此处理程序会如何处理档案內容
*/
public function read()
{
return simplexml_load_file($this->path);
}
}
/* End of file xml.php */
注意 $this->path。这将一直保持路徑为目前档案,即使在移动或改名時。
添加他們……
File 处理程序可以透過在 file 配置中添加來指派。
透過添加它們到基础配置,所有來自特定副档名的档案将被所需的处理程序取回。
你也可以在一个區域基础上,
透過添加它們到你想使用的區域配置中來指派处理程序。
// 在 app/config/file.php
'base_config' => array(
'file_handlers' => array(
'csv' => 'File_Handler_Csv',
),
),
'areas' => array(
'my_area' => array(
'file_handlers' => array(
'xml' => 'File_Handler_XML',
),
),
),