Symfony2将任何HTML控制器输出为JSON

Symfony2将任何HTML控制器输出为JSON,第1张

概述我有一个在Symfony2中创建的网站,现在我想要在移动应用程序中提供该网站的许多功能. 我的想法是通过附加一个简单的URL变量,然后它将在 JSON中输出相关页面请求的所有变量. 所以,如果我连接到 www.domain.com/profile/john-smith 它现在返回HTML页面. 但是,如果我去 www.domain.com/profile/john-smith?app 然后它返回一 我有一个在Symfony2中创建的网站,现在我想要在移动应用程序中提供该网站的许多功能.
我的想法是通过附加一个简单的URL变量,然后它将在 JSON中输出相关页面请求的所有变量.

所以,如果我连接到

www.domain.com/profile/john-smith

它现在返回HTML页面.
但是,如果我去

www.domain.com/profile/john-smith?app

然后它返回一个名称,年龄和其他配置文件信息的JsON对象.
然后我的应用程序代码接收JsON和进程.

我看不到任何安全问题,因为它只是JsON中提供的变量而且没有HTML.

通过执行上述 *** 作,我可以创建所有应用程序代码,只需调用与网页相同的URL,这将返回JsON中的变量,并节省了对更多服务器端工作的需求.

问题是:如果不修改每个控制器,我将如何做到这一点?

我无法想象一个事件监听器会这样做吗?也许我可以拦截Response对象并删除所有HTML?

有关最佳实践方法的任何想法吗?它应该很容易编码,但我试图了解它的设计.

解决方法 有一种正确的方法可以为此任务配置路由
article_show:  path:     /articles/{culture}/{year}/{Title}.{_format}  defaults: { _controller: AcmeDemoBundle:Article:show,_format: HTML }  requirements:      culture:  en|fr      _format:  HTML|RSS      year:     \d+

但是,这仍然需要您使用其他控制结构编辑每个Controller来处理该输出.

要解决这个问题,你可以做两件事.

>为您拥有的每个模板创建Json模板,然后将template.HTML.twig中的HTML替换为模板.’.$format.’.twig. (注意确保用户无法在URL中验证参数,这将是一个主要的安全风险).
>创建自己的抽象控制器类并覆盖render方法以检查所请求的格式并根据该格式提供输出.

class MyAbstractController extends Symfony\Bundle\FrameworkBundle\Controller\Controller{    public function render($vIEw,array $parameters = array(),Response $response = null)    {        if($this->getRequest()->getRequestFormat() == 'Json')        {            return new Response(Json_encode($parameters));        }        else        {           parent::render($vIEw,$parameters,$response);        }    }}

注意上面的代码是一个原型,不要指望它开箱即用.

我个人认为第二种方法更正确,因为没有重复的代码,安全问题也更少.

总结

以上是内存溢出为你收集整理的Symfony2将任何HTML控制器输出为JSON全部内容,希望文章能够帮你解决Symfony2将任何HTML控制器输出为JSON所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1139953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存