fuelphp 視圖
view 是 mvc 應(yīng)用程序的表示層。它將應(yīng)用程序邏輯與表示邏輯分開。當(dāng)控制器需要生成 html、css 或任何其他內(nèi)容時,它會將任務(wù)轉(zhuǎn)發(fā)給視圖引擎。
fuelphp 提供了一個簡單而靈活的類 view,它具有視圖引擎的所有必要功能。視圖類支持視圖文件的渲染。視圖文件是一個帶有嵌入式 php 指令的 html 頁面。視圖文件的變量可以使用 view 類設(shè)置為 php 數(shù)組,并使用數(shù)組的鍵在視圖文件中引用。讓我們來看看view類的一些重要方法。
鍛造
- 目的-創(chuàng)建一個新的視圖對象
- 參數(shù)-以下是參數(shù)
- $file-視圖文件相對于視圖文件夾的路徑,fuel/app/views
- $data-值數(shù)組
- $filter-設(shè)置自動編碼,默認(rèn)為主配置文件中的設(shè)置
- 返回-視圖的實例
例如
$view = view::forge ('path/to/view', array( 'title' => "show employee, 'employees' => $employees, ));
auto_filter
- 目的-設(shè)置是否對數(shù)據(jù)進(jìn)行編碼
- 參數(shù)-以下是參數(shù)
- $filter-true/false
- 返回-當(dāng)前視圖對象
例如
$view->auto_filter(); $view = $view->auto_filter(false);
set_filename
- 目的-允許設(shè)置或更改視圖文件。
- 參數(shù)-以下是參數(shù)-
- $file-相對于視圖文件夾、fuel/app/views 的查看文件路徑
- 返回-當(dāng)前視圖對象
例如
$view = new view(); $view>set_filename('path/to/view');
設(shè)置
- 目的-設(shè)置一個或多個變量的值
- 參數(shù)-以下是參數(shù)
- $key-變量名或值數(shù)組
- $value-值/空
- $filter-編碼設(shè)置,true/false
- 返回-當(dāng)前視圖對象
例如
$view = new view(); $view->set(array('name' => 'jon'));
set_global
set_global 與 set 類似,不同之處在于它適用于所有視圖,并且所有視圖都可以訪問變量。這是一個靜態(tài)方法。
view::set_global('name', 'jon', false);
set_safe
- 目的-使用安全編碼設(shè)置一個或多個變量的值。
- 參數(shù)-以下是參數(shù)-
- $key-變量名或值數(shù)組
- $value-值/空
- 返回-當(dāng)前視圖對象
例如
$view = new view(); $view->set_safe(array('name' => 'jon'), null);
得到
- 目的-獲取一個或多個變量的值
- 參數(shù)-以下是參數(shù)
- $key-變量名
- $default-未找到鍵時返回的默認(rèn)值
- 返回-輸入鍵的值
例如
$view = new view(); $name = $view>get('name'); // name = 'jon'
渲染
- 目的-通過將視圖文件與局部和全局變量合并,將其呈現(xiàn)為字符串
- 參數(shù)-以下是參數(shù)-
- $file-視圖文件名
- returns-呈現(xiàn)的視圖文件作為字符串
例如
$html = view::forge()->render('/path/to/view');
創(chuàng)建視圖
為了理解視圖,讓我們修改控制器的動作方法, action_show, controller_employee。
employee.php
class controller_employee extends controller { public function action_show() { return view::forge('employee/show'); } }
現(xiàn)在在位于 fuel/app/views 的 views 目錄中創(chuàng)建一個文件夾 employee。然后,在employee文件夾中創(chuàng)建一個文件 show.php并添加以下代碼。
show.php
<h3> my first view </h3>
現(xiàn)在,請求 url http://localhost:8080/employee/show 并產(chǎn)生以下結(jié)果。
將數(shù)據(jù)傳遞給視圖
如前所述,我們可以使用 view 方法將數(shù)據(jù)傳遞給視圖。下面是一個簡單的例子。
employee.php
class controller_employee extends controller { public function action_show() { $data = array(); //stores variables going to views $data['name'] = ‘jon’; $data[‘job’] = ‘designer’; //assign the view to browser output return view::forge('employee/show', $data); } }
現(xiàn)在,在 view 文件中添加更改。
show.php
hello, echo $name; . your job is, echo $job; .
請求 url 后,它將顯示名稱和作業(yè)如下:
查看過濾器
視圖使用輸出編碼來傳遞您想要的任何內(nèi)容。如果你想傳遞未過濾的數(shù)據(jù),我們可以使用 set 方法。
employee.php
class controller_employee extends controller { public function action_show() { $view = \view::forge('employee/show'); $view->set('name', 'jon', true); $view->set('job', '<em>designer</em>', false); return $view; } }
請求 url 后,會以強(qiáng)調(diào)方式顯示職位詳情,如下所示。
嵌套視圖
fuelphp 支持嵌套視圖。在嵌套視圖中,一個視圖可以包含一個或多個視圖。要在另一個視圖中設(shè)置視圖,我們可以使用 render 方法,如下所示。
employee.php
class controller_employee extends controller { public function action_nestedview() { //assign variables $data = array(); $data['title'] = 'home'; $data['name'] = 'jon'; $data['job'] = 'designer'; $views = array(); $views['head'] = view::forge('head', $data)->render(); $views['content'] = view::forge('employee/show', $data)->render(); return view::forge('layout', $views, false)->render(); } }
fuel/app/views/layout.php
echo $head; echo $content;
fuel/app/views/head.php
<title> <?php echo $title; ?></title>
fuel/app/views/employee/show.php
hello, echo $name; . your job is, echo $job; .
請求 url, http://localhost:8080/employee/nestedview 并查看源視圖后,它給出了以下代碼。
<title>home</title> hello, jon. your job is, designer.
模板控制器
fuelphp 提供了一個具有內(nèi)置布局概念的控制器 controller_template。布局概念是使用控制器的 before() 和 after() 方法完成的。要使用模板控制器,我們需要使用 controller_template 而不是 controller 來擴(kuò)展控制器。使用after()/before()方法時,需要調(diào)用parent::before和parent::after,否則模板會中斷。
class controller_test extends controller_template { public function before() { parent::before(); // do stuff } public function after($response) { $response = parent::after($response); // do stuff return $response; } }
模板.php
它是 fuel 中的默認(rèn)模板文件。模板文件用于調(diào)用 js、css、html 和調(diào)用視圖部分。它位于 fuel/app/views/。模板用于將您的視圖包裝在帶有頁眉、頁腳、側(cè)邊欄等的布局中。我們可以在 action 方法中使用 $template 變量更改默認(rèn)模板,如下所示。
fuel/app/classes/controller/test.php
class controller_test extends controller_template { public $template = 'template_test'; public function action_index() { $this--->template->title = 'example page'; $this->template->content = view::forge('test/index'); } }
fuel/app/views/template_test.php
<meta charset="utf-8"> <title><?php echo $title; ?></title> echo asset::css('bootstrap.css');echo $content;
fuel/app/views/test/index.php
<h3>my test page</h3>
現(xiàn)在,請求 url http://localhost:8080/test 并產(chǎn)生以下結(jié)果。
結(jié)果
<meta charset="utf-8"> <title>example page</title> <link type="text/css" rel="stylesheet" href="http://localhost:8080/assets/css/bootstrap.css?1464964766"><h3>my test page</h3>
生成查看頁面
您可以使用 fuel's oil 控制臺生成視圖頁面。以下是基本語法。
oil g controller <controller-name> <page1> <page2> ..</page2></page1></controller-name>
要生成帶有主頁和登錄頁面的管理控制器,請使用以下命令。
oil g controller admin home login
結(jié)果
creating view: /path/to/app/fuel/app/views/admin/home.php creating view: /path/to/app/fuel/app/views/admin/login.php creating controller: /path/to/app/fuel/app/classes/controller/admin.php