Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace Drupal\Core\Response;
- use Symfony\Component\HttpFoundation\Response;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\Routing\RequestContext;
- use Symfony\Component\Routing\RouteCollection;
- use Symfony\Component\Routing\Matcher\UrlMatcher;
- class DrupalResponse {
- protected $context;
- protected $routes;
- public function __construct(RequestContext $context, RouteCollection $routes) {
- $this->context = $context;
- $this->routes = $routes;
- }
- public function getResponse(Request $request) {
- $matcher = new UrlMatcher($this->routes, $this->context);
- try {
- $attributes = $matcher->match($request->getPathInfo());
- $request->attributes->add($attributes);
- $menu_item = $attributes['menu item'];
- $this->arguments_populate($menu_item, $attributes, 'access arguments');
- if ($menu_item['access callback'] === TRUE || call_user_func_array($menu_item['access callback'], $menu_item['access arguments'])) {
- if (isset($menu_item['file'])) {
- require_once DRUPAL_ROOT . '/' . $menu_item['file path'] . '/'. $menu_item['file'];
- }
- $this->arguments_populate($menu_item, $attributes, 'page arguments');
- $output = call_user_func_array($menu_item['page callback'], $menu_item['page arguments']);
- if ($output) {
- $response = new Response(drupal_render_page($output));
- }
- else {
- $response = new Response(drupal_render_page('An error occurred'), 500);
- }
- }
- else {
- $response = new Response(drupal_render_page('Access Denied'), 403);
- }
- }
- catch (Exception $e) {
- $response = new Response(drupal_render_page('Not Found'), 404);
- }
- $response->prepare($request);
- return $response;
- }
- public function arguments_populate(&$menu_item, $attributes, $argument_type) {
- foreach ($menu_item[$argument_type] as &$argument) {
- if (is_numeric($argument)) {
- $load_callback = $attributes['arguments'][$argument] .'_load';
- if (function_exists($load_callback)) {
- $argument = $load_callback($attributes[$attributes['arguments'][$argument]]);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment