- FuelPHP 教程
- FuelPHP - 首页
- FuelPHP - 简介
- FuelPHP - 安装
- FuelPHP - 架构概述
- FuelPHP - 简单 Web 应用程序
- FuelPHP - 配置
- FuelPHP - 控制器
- FuelPHP - 路由
- FuelPHP - 请求 & 响应
- FuelPHP - 视图
- FuelPHP - 展示器
- FuelPHP - 模型 & 数据库
- FuelPHP - 表单编程
- FuelPHP - 验证
- 高级表单编程
- FuelPHP - 文件上传
- FuelPHP - Ajax
- FuelPHP - HMVC 请求
- FuelPHP - 主题
- FuelPHP - 模块
- FuelPHP - 包
- Cookie & 会话管理
- FuelPHP - 事件
- FuelPHP - 邮件管理
- FuelPHP - 性能分析器
- 错误处理 & 调试
- FuelPHP - 单元测试
- 完整的运行示例
- FuelPHP 有用资源
- FuelPHP - 快速指南
- FuelPHP - 有用资源
- FuelPHP - 讨论
FuelPHP - 视图
视图是 MVC 应用程序的表示层。它将应用程序逻辑与表示逻辑分离。当控制器需要生成 HTML、CSS 或任何其他内容时,它会将任务转发给视图引擎。
FuelPHP 提供了一个简单而灵活的类 View,它具有视图引擎的所有必要功能。View 类支持渲染视图文件。视图文件是一个包含嵌入式 PHP 指令的 HTML 页面。视图文件的变量可以使用 View 类作为 PHP 数组进行设置,并使用数组的键在视图文件中引用。让我们检查一下 View 类的一些重要方法。
forge
用途 - 创建一个新的 View 对象
参数 - 以下是参数
$file - 视图文件的路径,相对于 views 文件夹,fuel/app/views
$data - 值的数组
$filter - 设置自动编码,默认为主配置文件中的设置
返回值 - 视图的实例
例如,
$view = View::forge ('path/to/view', array(
'title' => "Show employee,
'employees' => $employees,
));
auto_filter
用途 - 设置是否对数据进行编码
参数 - 以下是参数
$filter - true / false
返回值 - 当前视图对象
例如,
$view->auto_filter(); $view = $view->auto_filter(false);
set_filename
用途 - 允许设置或更改视图文件。
参数 - 以下是参数 -
$file - 视图文件的路径,相对于 views 文件夹,fuel/app/views
返回值 - 当前 View 对象
例如,
$view = new View();
$view>set_filename('path/to/view');
set
用途 - 设置一个或多个变量的值
参数 - 以下是参数
$key - 变量名或值的数组
$value - 值 / null
$filter - 编码设置,true / false
返回值 - 当前视图对象
例如,
$view = new View();
$view->set(array('name' => 'Jon'));
set_global
set_global 与 set 类似,不同之处在于它适用于所有视图,并且所有视图都可以访问这些变量。这是一个静态方法。
View::set_global('name', 'Jon', false);
set_safe
用途 - 设置一个或多个变量的值,并开启安全编码。
参数 - 以下是参数 -
$key - 变量名或值的数组
$value - 值 / null
返回值 - 当前视图对象
例如,
$view = new View();
$view->set_safe(array('name' => 'Jon'), null);
get
用途 - 获取一个或多个变量的值
参数 - 以下是参数
$key - 变量名
$default - 如果找不到键,则返回的默认值
返回值 - 输入键的值
例如,
$view = new View();
$name = $view>get('name'); // name = 'Jon'
render
用途 - 通过将其与本地和全局变量合并,将视图文件渲染成字符串
参数 - 以下是参数 -
$file - 视图文件名
返回值 - 渲染后的视图文件作为字符串
例如,
$html = View::forge()->render('/path/to/view');
创建视图
为了理解视图,让我们修改控制器 Controller_Employee 的 action 方法 action_show。
employee.php
<?php
class Controller_Employee extends Controller {
public function action_show() {
return View::forge('employee/show');
}
}
现在在 views 目录(位于 fuel/app/views)中创建一个名为 employee 的文件夹。然后,在 employee 文件夹中创建一个名为 show.php 的文件,并添加以下代码。
show.php
<h3> My first view </h3>
现在,请求 URL https://:8080/employee/show,它会产生以下结果。
向视图传递数据
我们可以使用前面讨论过的 View 方法向视图传递数据。以下是一个简单的示例。
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);
}
}
现在,在视图文件中添加更改。
show.php
<html>
<body>
Hello, <?php echo $name; ?>.
Your job is, <?php echo $job; ?>.
</body>
</html>
请求 URL 后,它将显示名称和职位,如下所示 -
视图过滤器
视图使用输出编码来传递任何你想要的东西。如果你想传递未过滤的数据,我们可以使用 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 后,它将以强调样式显示职位详细信息,如下所示。
嵌套视图
FuelPHP 支持嵌套视图。在嵌套视图中,一个视图可以包含一个或多个视图。要在一个视图中设置其他视图,我们可以使用 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
<html>
<head>
<?php echo $head; ?>
</head>
<body>
<?php echo $content; ?>
</body>
</html>
fuel/app/views/head.php
<title> <?php echo $title; ?> </title>
fuel/app/views/employee/show.php
Hello, <?php echo $name; ?>. Your job is, <?php echo $job; ?>.
请求 URL https://:8080/employee/nestedview 并检查源视图后,它会给出以下代码。
<html>
<head>
<title>Home</title>
</head>
<body>
Hello, Jon.
Your job is, Designer.
</body>
</html>
模板控制器
FuelPHP 提供了一个控制器 Controller_Template,它具有内置的布局概念。布局概念是使用控制器的 before() 和 after() 方法完成的。要使用模板控制器,我们需要使用 Controller_Template 而不是 Controller 扩展控制器。使用 after() / before() 方法时,我们需要调用 parent::before 和 parent::after,否则模板会中断。
<?php
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;
}
}
template.php
这是 Fuel 中的默认模板文件。模板文件用于调用 JS、CSS、HTML 和调用视图部分。它位于fuel/app/views/。模板用于将你的视图包装在一个具有标题、页脚、侧边栏等的布局中。我们可以使用 action 方法中的 $template 变量更改默认模板,如下所示。
fuel/app/classes/controller/test.php
<?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
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title><?php echo $title; ?></title>
<?php echo Asset::css('bootstrap.css'); ?>
</head>
<body>
<div>
<?php echo $content; ?>
</div>
</body>
</html>
fuel/app/views/test/index.php
<h3>My Test page</h3>
现在,请求 URL https://:8080/test,它会产生以下结果。
结果
<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<title>Example Page</title>
<link type = "text/css" rel = "stylesheet"
href = "https://:8080/assets/css/bootstrap.css?1464964766" />
</head>
<body>
<div>
<h3>My Test page</h3>
</div>
</body>
</html>
生成视图页面
您可以使用 Fuel 的 Oil 控制台生成视图页面。以下是基本语法。
oil g controller <controller-name> <page1> <page2> ..
要生成一个带有主页和登录页面的管理员控制器,请使用以下命令。
oil g controller admin home login
结果
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