视图概述
视图(View)是MVC框架中用户看到并与之交互的界面部分。StartMVC提供了一个轻量级但功能强大的模板引擎,支持原生PHP语法与简洁的模板标签,兼顾了开发效率和运行性能。
创建视图
视图文件默认以.php
结尾,命名规则为控制器_方法.php
,默认位于/模块/view
目录下。
多主题支持
StartMVC支持多风格模板,可在config/common.php
中设置:
'theme' => '', //指定模板子目录,例如'default',为空时模板文件直接在view下
调用视图
在控制器中使用$this->display()
方法调用视图:
namespace app\home\controller;
use startmvc\core\Controller;
class IndexController extends Controller {
function indexAction(){
// 默认输出到home模块下的view/index_index.php
$this->display();
// 输出到home模块下的view/view.php
$this->display('view');
// 输出到admin模块下的view/public/view.php
$this->display(['Admin', 'public/view']);
}
}
获取视图内容但不输出
如果您需要获取渲染结果但不直接输出,可以使用fetch
方法:
// 获取渲染内容
$content = $this->fetch('index');
// 对内容进行处理
$content = str_replace('old', 'new', $content);
// 手动输出
echo $content;
视图赋值
传递变量到视图
在控制器中使用assign
方法传递变量到视图:
// 单个变量赋值
$this->assign('title', 'StartMVC框架');
// 批量赋值
$data = [
'title' => 'StartMVC框架',
'users' => [
['name' => '小明', 'age' => 21],
['name' => '小红', 'age' => 20]
]
];
$this->assign($data);
// 支持链式调用
$this->assign('title', '网站标题')
->assign('keywords', 'PHP,MVC,轻量级')
->display();
// 在display时传递变量
$this->display('index', ['time' => time()]);
在视图中使用变量
视图中有两种方式使用变量:
1. PHP原生语法:
<h1><?php echo $title; ?></h1>
<ul>
<?php foreach($users as $user): ?>
<li>姓名:<?php echo $user['name']; ?>,年龄:<?php echo $user['age']; ?></li>
<?php endforeach; ?>
</ul>
2. 模板标签语法:
<h1>{$title}</h1>
<ul>
{loop $users $user}
<li>姓名:{$user.name},年龄:{$user.age}</li>
{/loop}
</ul>