视图详解

视图概述

视图作为 MVC 模式中的终端环节,在 web 编程中负责 dom 结构的展示。
phpGrace 使用 php 作为“天然模板“,您不必再去学习其他的模板语法,系统更不必浪费资源去完成复杂的模板解析工作!

1 视图创建与调用

1.1 视图文件路径模式

您可以在入口文件中通过定义 PG_VIEW_TYPE 常量来改变视图的路径模式( 默认 dir );
模式说明 :
dir : 文件夹形式 [ 默认模式 ], 视图文件路径规则 : 控制文件夹/方法名称.php
file
: 文件形式,视图文件路径规则 : 控制器名称_方法名称.php

1.2 视图文件位置及命名规则

/分组目录 : 如 /app
    /views
        // 框架自动调用视图
        /控制器文件夹/方法名.php [ dir 模式 ] 或者 控制器文件夹_方法名.php [ file 模式 ]
        // 手动调用 使用 $this->display() 函数调用
        /自定义目录/自定义视图名称.php 或者 /自定义视图名称.php

2. 控制器与视图间的数据共享

您定义的视图在控制内被自动或者使用 $this->display() 调用,其实调用的核心非常简单且高效,核心就是“include”,这样就意味着您的视图文件和控制器都在一个对象内部!那么......

他们可以共享成员变量,即 $this->变量名称!
演示代码
# 控制器 .php , 如 index 控制器 -> index 方法

<?php
class indexController extends grace{
    public function index(){
        $this->name = 'phpGrace';
        $this->array = array('张三','李四','王五');
    }
}

# 视图.php ,如 views/index/index.php

<?php if(!defined('PG_VERSION')){exit();}?>
<h3><?php echo $this->name;?></h3>
<ol>
    <?php foreach($this->array as $rows){?>
    <li><?php echo $rows;?></li>
    <?php }?>
</ol>

3. 使用 display() 函数手动调用视图

框架会自动按照视图规则调用视图,如果需要关闭自动展示 : 

// 在分组入口文件 index.php 内定 PG_AUTO_DISPLAY 为 false;
define('PG_AUTO_DISPLAY'  , false); 
// 引入框架并运行
include '../phpGrace/phpGrace.php';

您还可以在控制器内使用 $this->display() 函数调用任意视图文件,可以多次执行,调用多次;

<?php
class indexController extends grace{
    public function index(){
        $this->name = 'phpGrace';
        $this->array = array('张三','李四','王五');
        // 路径关系 : 起始于 /views/ 目录
        $this->display('header.php');
    }
}

4. 视图引用

web 开发中我们通常会使用通用的的头部和底部,可以在视图文件中引入它们,如 :

<?php include $this->templateDir.'header.php';?>

5. 避免视图文件被直接运行

视图文件应该被控制器调用,而不应该单独运行,我们可以在视图文件首行检查 phpgrace 版本常量,以保证视图一定是被框架调用,而非独立运行 :

<?php if(!defined('PG_VERSION')){exit();}?>
<html>...</html>