首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何显示在浏览器中发出的API请求的symfony分析器?

如何显示在浏览器中发出的API请求的symfony分析器?
EN

Stack Overflow用户
提问于 2014-02-04 14:52:07
回答 5查看 23K关注 0票数 36

我正在用Symfony2 + FOSRest包开发REST。

我想知道是否有任何方法从浏览器(对应于Accept: text/html,application/xhtml+xml头)调用开发模式下的api (Accept: text/html,application/xhtml+xml),以“指定格式”显示响应,并使用symfony提供的分析器包装在html中。

它允许在浏览器中直接调试对api的调用。

编辑:我不想调试HTTP请求,而是调试整个过程(路由匹配、DB查询等)。这就是我想要访问symfony分析器的原因。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-11 08:20:44

自从Symfony 2.4以来,分析器在header中设置了另外两个设置:X-Debug-TokenX-Debug-Token-Link。(见http://symfony.com/blog/new-in-symfony-2-4-quicker-access-to-the-profiler-when-working-on-an-api)

这些标头包含当前请求的令牌和到分析器的直接链接。如果启用了分析器,则始终发送它们。

毫不奇怪,Chrome已经有了一个扩展,可以检查这些头文件是否存在,并提供额外的信息:Symfony2 Profiler shortcut

在我看来,这比任何定制的html包装都要好,但这只适用于GET,也许还适用于POST请求-- PUT和DELETE请求要复杂一些。在那里,您可以使用http客户端,如铬扩展POSTMAN,并通过打开http-header X-Debug-Token-Link中提供的链接或保留分析器页面(f.e )手动打开分析器。( profiler/)开放。

票数 51
EN

Stack Overflow用户

发布于 2014-02-12 20:47:52

开发JSON或XML时没有显示WebDebugToolbar的原因是工具栏被设置为只被注入到HTML响应中。

为了克服这一问题,您可以在绑定中添加一个kernel.response事件侦听器,它将您的JSON或XML响应转换为HTML。

代码语言:javascript
代码运行次数:0
运行
复制
namespace Acme\APIBundle\Event\Listener;

use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class ConvertToHtmlResponse {
  public function onKernelResponse(FilterResponseEvent $event) {
    if (!$event->isMasterRequest()) {
      return;
    }

    $request = $event->getRequest();

    // Only send back HTML if the requestor allows it
    if (!$request->headers->has('Accept') || (false === strpos($request->headers->get('Accept'), 'text/html'))) {
      return;
    }

    $response = $event->getResponse();
    switch ($request->getRequestFormat()) {
      case 'json':
        $prettyprint_lang = 'js';
        $content = json_encode(json_decode($response->getContent()), JSON_PRETTY_PRINT);
        break;

      case 'xml':
        $prettyprint_lang = 'xml';
        $content = $response->getContent();
        break;

      default:
        return;
    }

    $response->setContent(
      '<html><body>' .
      '<pre class="prettyprint lang-' . $prettyprint_lang . '">' .
      htmlspecialchars($content) .
      '</pre>' .
      '<script src="https://cdnjs.cloudflare.com/ajax/libs/prettify/r298/run_prettify.min.js"></script>' .
      '</body></html>'
    );

    // Set the request type to HTML
    $response->headers->set('Content-Type', 'text/html; charset=UTF-8');
    $request->setRequestFormat('html');

    // Overwrite the original response
    $event->setResponse($response);
  }
}

然后,只需将包中的侦听器注册到kernel.response事件,我建议您只在dev环境配置中这样做。

代码语言:javascript
代码运行次数:0
运行
复制
services:
  # ...
  acme.listener.kernel.convert_html:
    class: Acme\APIBundle\Event\Listener\ConvertToHtmlResponse
    tags:
      - { name: kernel.event_listener, event: kernel.response }
票数 14
EN

Stack Overflow用户

发布于 2017-07-20 11:49:41

您只需打开一个单独的浏览器,浏览到./ app_dev.php /_profiler/,就会发现您对app_dev.php的所有请求都已完成,包括路由匹配、所涉及的DB查询等。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21555697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档