/** * Registers services on the given app. * * This method should only be used to configure services and parameters. * It should not get services. * @param Application $app */ public function register(Application $app) { $app->view(function (Health $healthResult) use($app) { $healthDetails = array(); foreach ($healthResult->getDetails() as $key => $healthDetail) { $healthDetails[$key] = array_merge(array('status' => $healthDetail->getStatus()->getCode()), $healthDetail->getDetails()); } $healthDetails = array_merge(array('status' => $healthResult->getStatus()->getCode()), $healthDetails); return $app->json($healthDetails); }); $app['health.aggregator'] = $app->share(function () { return new OrderedHealthAggregator(); }); $app['health.indicators'] = array(); $app['health.endpoint'] = '/health'; }
public function testViewListenersResponsesAreNotUsedIfNull() { $app = new Application(); $app->get('/foo', function () { return 'Hello world'; }); $app->view(function ($view) { return 'Hello view listener'; }); $app->view(function ($view) { return; }); $response = $app->handle(Request::create('/foo')); $this->assertEquals('Hello view listener', $response->getContent()); }
public function connect(Application $app) { $app->view(function (array $result, Request $request) use($app) { return $app->json($result['body'], $result['code'], $result['headers']); }); $app->before(function (Request $request) { if (0 === strpos($request->headers->get('Content-Type'), 'application/json')) { $data = json_decode($request->getContent(), true); $request->request->replace(is_array($data) ? $data : []); } }); if (isset($app['restapi']['cors'])) { $app->before(function (Request $request, Application $app) { return $app['restapi.middleware.cors']->processRequest($request); }, Application::EARLY_EVENT); $app->after(function (Request $request, Response $response, Application $app) { return $app['restapi.middleware.cors']->processResponse($request, $response); }); } $controllers = $app['controllers_factory']; if (isset($app['restapi']['auth'])) { $controllers->post('/auth/login', function (Request $request) use($app) { if (!$request->request->has('username') or !$request->request->has('password')) { return new Response(null, 400, ['Content-Type' => 'application/json']); } $username = $request->request->get('username'); $password = $request->request->get('password'); if (true !== $app['restapi.auth']->verifyCredentials($username, $password)) { return new Response(null, 401, ['Content-Type' => 'application/json']); } $response = new Response(['username' => $username, 'token' => $app['restapi.auth']->createJwtTokenForUser($username)]); $response->headers->setCookie($app['restapi.auth']->createCookieForToken($token)); if (true === $request->request->has('redirect')) { $response->headers->set('Location', $request->request->get('redirect')); $response->setStatusCode(302); } $response->headers->set('Content-Type', 'application/json'); return $response; }); $controllers->post('/auth/logout', function () use($app) { $response = new Response(null, 204, ['Content-Type' => 'application/json']); $cookie = $app['restapi.auth']->deleteCookie(); $response->headers->setCookie($cookie); return $response; }); } $resources = $app['controllers_factory']; if (isset($app['restapi']['auth'])) { $resources->before($app['restapi.listener.auth_checker']); } $resources->get('/', function () use($app) { return $app['restapi.service']->listResources(); }); $resources->get('/files/{hash}', function ($hash) use($app) { return $app->sendFile($app['restapi.service']->fetchFile($hash)); }); $resources->get('/thumbs/{hash}', function ($hash) use($app) { try { return $app->sendFile($app['restapi']['thumbs_path'] . '/' . $app['restapi.storage']->hashToFilePath($hash) . '.png'); } catch (\Exception $e) { return new Response(null, 404); } }); $resources->get('/{table}', function (Request $request, $table) use($app) { return $app['restapi.service']->readCollection($table, $request->query->all()); }); $resources->post('/{table}', function (Request $request, $table) use($app) { return $app['restapi.service']->createResource($table, array_merge($request->request->all(), $request->files->all())); }); $resources->get('/{table}/{pk}', function (Request $request, $table, $pk) use($app) { return $app['restapi.service']->readResource($table, $pk, $request->query->all()); }); $resources->match('/{table}/{pk}', function (Request $request, $table, $pk) use($app) { return $app['restapi.service']->updateResource($table, $pk, array_merge($request->request->all(), $request->files->all())); })->method('POST|PATCH'); $resources->delete('/{table}/{pk}', function ($table, $pk) use($app) { return $app['restapi.service']->deleteResource($table, $pk); }); $controllers->mount('/', $resources); return $controllers; }