Skip to content
awencheong edited this page Oct 15, 2016 · 3 revisions

3. 展示层views

展示层在设置路由的时候一并指定,如果不指定,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 对象,其详细使用方法如下[????]
Clone this wiki locally