web 框架 对于同样的 action 操作,不同输出方式,怎么样设计比较优雅

2014-11-02 21:05:37 +08:00
 yakczh
对于同样的业务逻辑,可能是页面get/post请求 后,套上模板输出,也可以是ajax请求后输出json数据
一般是写if else 判断 
if( $this->isAjax() ) { 
xx }  else {
oo
}

如果要统一封装下,怎么样设计比较好
2067 次点击
所在节点    问与答
7 条回复
bigredapple
2014-11-02 21:23:17 +08:00
看 Accept
abelyao
2014-11-03 00:24:00 +08:00
有一些框架自带了 GET / POST 的判断,
甚至有一些在配置 router 的时候可以指定 GET 和 POST 使用不同的处理方式。
qiayue
2014-11-03 01:08:09 +08:00
多带一个 format 参数, format 为 html 则输出 html ,为 json 则输出 json
你可以把 html 和 json 当做不同的模板,那么 action 中只需要指定模板为 format 的值即可

另外,可能需要在没有 format 参数是给一个默认值
chemzqm
2014-11-03 01:35:59 +08:00
根据http规范应该检查accept,考虑到accept是多个值组成的字段,一般是优先输出html然后json。如果你想做框架给别人用的话,最好不要做多余的假定
virusdefender
2014-11-03 08:36:40 +08:00
参考做rest api格式
a.com/1/?format=json
a.com/1/?format=xml
你可以没有后缀就默认html或者检测accept
coldwinds
2014-11-03 12:48:28 +08:00
negotiation
yakczh
2014-11-04 22:27:50 +08:00
$app->path('posts', function($request) use($app) {
$app->get(function($request, $postId) use($app) {
// Prepare your data ONCE
$data = array(
array('title' => 'Foo', 'author' => 'Calvin'),
array('title' => 'Bar', 'author' => 'Hobbes')
);

// Respond in multiple formats
$app->format('json', function($request) use($app, $data) {
return $data;
});
$app->format('html', function($request) use($app, $data) {
return $app->template('posts', $data);
});
});
});


这种写法感觉比较丑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/143458

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX