视图

简单来说,一个视图其实就是一个 Web 页面,或者页面的一部分,像页头、页脚、侧边栏等,MixPHP的视图支持布局。

| 类 |
| --- |
| mix\web\View |

创建一个视图

下面演示为控制器 IndexController 创建一个视图,控制器代码如下:

<?php

namespace index\controller;

use mix\web\Controller;

class IndexController extends Controller
{

    public $layout = 'main';

    public function actionIndex()
    {
        $data = [
            'name'   => '小明',
            'age'    => '男',
            'friend' => ['小红', '小花', '小飞'],
        ];
        return $this->render('index', $data);
    }

}

先在 view/layout 目录建立一个布局文件 main.php,代码如下:

<html>
<head>
    <title><?= $this->title ?></title>
</head>
<body>
    <?= $content ?>
</body>
</html>

然后在 view 目录创建一个 index 目录,在目录中创建一个 index.php 文件,代码如下:

  • MixPHP的视图直接使用PHP做为引擎。
  • 视图文件名全部使用小写,多个单词时,使用下划线分隔,例如:setting_profile.php
  • 通过 $this->name 可以传递数据到布局文件中使用。
<?php
$this->title = 'Mix View';
?>
<p>Welcome, name: <?= $name ?>, age: <?= $age ?></p>
<ul>
    <?php foreach($friend as $name): ?>
    <li><?= $name ?></li>
    <?php endforeach; ?>
</ul>

渲染视图

从上面的例子中可看出,视图的渲染是在控制器中,代码如下:

return $this->render(视图名, 数组);

视图名

不需要加上目录,框架会自动获取,只需输入视图文件名称,不需要带 .php 后缀。

数组

需要传递给视图使用的数据,是一个数组类型,数组 key 会变为视图内的变量名称,数组 value 会变为变量的值。

视图布局

当使用 $this->render 渲染视图时,MixPHP会获取控制器属性 layout 的值,用来读取对应的布局文件。

如果控制器未定义该属性,则该属性默认为 mian。

public $layout = 'main';

不使用布局

当有需求不需要使用到布局时,使用下面的代码渲染视图:

return $this->renderPartial(视图文件名, 数组);

视图嵌套

当你在布局中使用公共的侧边栏等类似的需求时,需要在视图中加载另一个视图,如下:

// $__data__ 为当前视图传入的数组,可以让子视图使用父视图的变量。
<?= $this->render(子视图名, $__data__); ?>