处理程序

简介

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' 需要被回傳的時間。只能是 createdmodified
回傳 档案的建立或修改時間戳記
範例
$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' 需要被回傳的時間。只能是 createdmodified
回傳 目录的建立或修改時間戳記
範例
$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',
		),
	),
),