-
Notifications
You must be signed in to change notification settings - Fork 0
3.展示层views
awencheong edited this page Oct 15, 2016
·
3 revisions
展示层在设置路由的时候一并指定,如果不指定,XXX默认将controller返回的内容渲染为json格式
<?php
app()->get("/user/info/", "User@info")->view("json_encode");
//等价于下面的
app()->get("/user/info/", "User@info");
app()->view("/user/info", "json_encode");
- "json" 就是php自带函数json_encode, 这是简写形式的,其等价于下面的路由规则:
<?php
app()->get("/user/info", "User@info")->view("json_encode($1)");
- XXX用$1来传递上下文的输入,有点类似linux的1 (标准输出)
更进一步,我们可以使用自定义的函数来实现渲染功能:
<?php
app()->get("/user/info", "User@info")
->view("MyFmt@html('/user/info.html', $1)");
- "user/info.html" 作为 MyFmt::html() 的第一个参数
- $1 即 controller 返回的内容, 作为 MyFmt::html() 的第二个参数
或者, 我们可以直接使用一个可调用对象(匿名函数,类对象等)进行渲染
<?php
app()->get("/user/info", "User@info")
->view(function($data){ echo json_encode($data); });
有时候,我们需要一个全局的渲染格式,例如统一 成功的输出格式 和 失败的输出格式:
<?php
app()->view(function($data, $app) {
if ($err = $app->error()) {
echo json_encode(["result" => -1, "error" => $err, "data" => $data]);
} else {
echo json_encode(["result" => 0, "error" => null, "data" => $data]);
}
});
app()->get("/user/friends", "User@friends")->view("json_encode($1)");
app()->get("/user/info", "User@info");
- "/user/friends" 设置了自己的渲染格式,因此会直接使用 json_encode 渲染
- "/user/info" 没有设置自己的渲染,因此会采用全局的渲染函数 function($data, $app)
- 变量$app是全局类 App 对象,其详细使用方法如下[????]