在View - IModelAndTemplate中我们已经举了一个HelloWorld的例子,现在更加深入一下,我们把控制器名称HelloWorld换为HelloWorldController,设想一下有一个数据库记录了你的个人信息(姓名、年龄、地址)以及你的专长(是一个列表,比如PHP、Java、Ruby),你需要在你的个人主页上显示这些信息。
首先写 HelloWorldController.php
<?php
class HelloWorldController extends IApplication {
public function appIndex() {
//设置mint选项
IMint::setOptions(array("compile-dir"=>IFRAMEWORK_DIRECTORY . "/../mint/compiled", "template-dir"=>IFRAMEWORK_DIRECTORY . "/../mint/template", "mode"=>"debug"));
//创建一个数组存放你的信息
$info = array();
$info["name"] = "kiki";
$info["age"] = 20;
$info["address"] = "100 street,beijing";
$info["skills"] = array("PHP", "Java", "Ruby", "Javascript");
return new IModelAndTemplate($info, "helloworld");
}
}
?>
我们在方法appIndex中首先定义了mint的选项,注意到mode设为debug,在调试器使用此模式相当有用,无需每次手工清空编译文件。然后我们创建了一个数组$info,存放个人信息,skills是一个列表。最后再使用IModelAndTemplate视图方案将$info和helloworld模板结合起来。
现在写模板helloworld.html,将数据描述出来
<html>
<head>
<title>hello,world</title>
</head>
<body>
my name: <strong>{$name}</strong><br/>
my age: {$age}<br/>
my address: {$address}<br/>
my skills
<ul com="@foreach" x-data-set="$skills" x-value="$skill">
<li>{$skill}</li>
</ul>
</body>
</html>
访问通过分发器访问控制器
http://framework/iframework2/?controller=helloWorld
浏览器上输出了
my name: kiki
my age: 20
my address: 100 street,beijing
my skills
PHP
Java
Ruby
Javascript
在上面的例子中,我们没有使用一些setVar或assign给一个变量或循环赋值,而只是将数据交给模板,再在模板里使用mint的两个元素:变量和组件来表述。
mint可以使用@或者$(美元符号)来标识变量,比如
@name
$age
都是合法而且本质是一样的,在模板里使用 {$变量名}或{@变量名}(以下除了组件名,只使用$符号标识变量) 可以输出一个变量值,比如
我的名字叫 {$name},年龄 {$age}
变量名支持以下几种形式
$var - 普通变量
${var} - 变量的另外一种形式
$var[a][b] - 访问数组元素
$var->b->c->d - 访问对象属性
$var.b.c.d - 同$var->b->c->d一样用来访问对象属性
$var->b[a] - 对象和数组的组合
$var->b[a]+1.2*3.14 - 变量和数字、运算符的组合
$var[1,3] - 如果$var是数组,则取第一到第三个元素;如果是标量,则取第一到第三个字符
除了用户定义的一些变量外,还可以在模板里使用预定义变量:
$mint.now - 当前时间戳
$mint.version - 当前使用的mint版本号
$mint.request.name - 当前客服端请求(把name换成参数值)
$mint.const.name - 当前服务器端常量(把name换成常量名称)