Skip to content

Instantly share code, notes, and snippets.

@devosc
Created August 19, 2017 16:52
Show Gist options
  • Save devosc/7ba2ef9993a338c04899c2cb80f5da28 to your computer and use it in GitHub Desktop.
Save devosc/7ba2ef9993a338c04899c2cb80f5da28 to your computer and use it in GitHub Desktop.
Context
<?php
/**
*
*/
include __DIR__ . '/../init.php';
use Mvc5\App;
use Mvc5\Arg;
use Mvc5\Http\Request;
use Mvc5\Http\Response;
use Mvc5\Service\Context;
use Mvc5\View\ViewModel;
use Mvc5\View\ViewLayout;
Context::bind(new App(include __DIR__ . '/../config/config.php', null, true));
try {
$request = Context::plugin('request');
$response = Context::plugin('response');
$result = Context::{'route\dispatch'}($request);
if ($result instanceof Request) {
$request = Context::{'request\error'}($result);
$result = null;
Context::service()[Arg::REQUEST] = $request;
$controller = $request->controller();
$controller && $result = Context::call(
$controller, [Arg::REQUEST => $request, Arg::RESPONSE => $response]
);
}
if ($result instanceof ViewModel) {
!$result instanceof ViewLayout && ($layout = Context::plugin(Arg::LAYOUT))
&& $result = $layout->withModel($result);
$result = Context::{'render'}($result);
}
($result instanceof Response && $response = $result)
|| $response = $response->with(Arg::BODY, $result);
$response = Context::{'response\status'}($request, $response);
$response = Context::{'response\version'}($request, $response);
Context::{'response\send'}($response);
} catch(\Throwable $exception) {
Context::call('exception\response', ['exception' => $exception]);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment