5.4. HelloWorld

5.4.1. 示例分析

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

5.4.1. 示例分析

在上面的例子中,我们没有使用一些setVar或assign给一个变量或循环赋值,而只是将数据交给模板,再在模板里使用mint的两个元素:变量和组件来表述。

5.4.1.1. 变量

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换成常量名称)

5.4.1.2. 组件

我们在遍历skills时使用了@foreach组件,通过和它在同一节点上的属性来定义它的参数,比如模板中的x-data-set属性和x-value属性。关于组件,我们在下面会有更详细的说明。