DebugKit\Routing\Filter\DebugBarFilter::afterDispatch PHP Method

afterDispatch() public method

Save the toolbar data.
public afterDispatch ( Cake\Event\Event $event ) : void
$event Cake\Event\Event The afterDispatch event.
return void
    public function afterDispatch(Event $event)
    {
        /* @var Request $request */
        $request = $event->data['request'];
        // Skip debugkit requests and requestAction()
        if ($request->param('plugin') === 'DebugKit' || $request->is('requested')) {
            return;
        }
        /* @var Response $response */
        $response = $event->data['response'];
        $data = ['url' => $request->here(), 'content_type' => $response->type(), 'method' => $request->method(), 'status_code' => $response->statusCode(), 'requested_at' => $request->env('REQUEST_TIME'), 'panels' => []];
        /* @var \DebugKit\Model\Table\RequestsTable $requests */
        $requests = TableRegistry::get('DebugKit.Requests');
        $requests->gc();
        $row = $requests->newEntity($data);
        $row->isNew(true);
        foreach ($this->_registry->loaded() as $name) {
            $panel = $this->_registry->{$name};
            try {
                $content = serialize($panel->data());
            } catch (\Exception $e) {
                $content = serialize(['error' => $e->getMessage()]);
            }
            $row->panels[] = $requests->Panels->newEntity(['panel' => $name, 'element' => $panel->elementName(), 'title' => $panel->title(), 'summary' => $panel->summary(), 'content' => $content]);
        }
        $row = $requests->save($row);
        $this->_injectScripts($row->id, $response);
        $response->header(['X-DEBUGKIT-ID' => $row->id]);
    }

Usage Example

 /**
  * Test that afterDispatch does not modify response
  *
  * @return void
  */
 public function testAfterDispatchNoModifyResponse()
 {
     $request = new Request(['url' => '/articles']);
     $response = new Response(['statusCode' => 200, 'type' => 'application/json', 'body' => '{"some":"json"}']);
     $bar = new DebugBarFilter($this->events, []);
     $bar->setup();
     $event = new Event('Dispatcher.afterDispatch', $bar, compact('request', 'response'));
     $bar->afterDispatch($event);
     $this->assertTextEquals('{"some":"json"}', $response->body());
 }