使用布局


布局文件是视图控制器中输出内容的模板

创建布局文件

调用视图控制器的display()方法时, 会制动加载模板文件夹根目录下的默认布局文件default.layer.php, 一个简单HTML布局文件内容如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="Keywords" content="<?php echo isset($keywords) ? $keywords : "默认关键词"); ?>"/>
    <meta name="Description" content="<?php echo isset($description) ? $description : '默认描述'; ?>"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">

	<title><?php echo isset($title)?$title:'默认标题' ?></title>
</head>
<body>
    <?php echo isset($content)?$content:'' ?>
</body>
</html>

当执行视图控制器中的方法时, 视图控制器中的方法输出的内容会被赋值给布局文件中的变量$content, 最后合并到布局文件中输出到客户端.

在布局文件中调用视图控制器中的方法

直接在布局文件中使用$this->action()就可以调用视图控制器中的方法, 如下例

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="Keywords" content="<?php echo isset($keywords) ? $keywords : "默认关键词"); ?>"/>
    <meta name="Description" content="<?php echo isset($description) ? $description : '默认描述'; ?>"/>
    <meta name="viewport" content="width=device-width, initial-scale=1">

	<title><?php echo isset($title)?$title:'默认标题' ?></title>
	<?php $this->loadRes() ?>
</head>
<body>
    <?php echo isset($content)?$content:'' ?>
</body>
</html>

在视图控制器中添加loadRes()方法, 就可以直接在视图控制器中调用了

为布局文件中的变量赋值

通过视图控制器更改网页标题, keywords,和description

namespace app\web\views;

use Cross\MVC\View;

class MainView extends View
{
    function index($data = array())
    {
        $this->set(array(
            'title' =>  'hi',
            'keywords'   =>  'crossphp',
            'description'   =>  '轻量高效php开发框架',
        ));

        include $this->tpl("main/index");
    }
}

布局文件中的所有变量均可以在方法中调用$this->set()设置值. set()方法参数为一个数组, 数组的key即为布局文件中的变量名.

控制资源文件

添加静态资源文件,如css,js等,需在layer中指定位置添加$this->loadRes()方法

namespace app\web\views;

use Cross\MVC\View;

class MainView extends View
{
    function index($data = array())
    {
		$this->addRes("css/style.css");
        include $this->tpl("main/index");
    }
}

>自定义app中的视图控制器基类的基类而不是直接继承CoreView,这样更灵活易扩展.