コード例 #1
0
 /**
  * Parses a WordPress request.
  *
  * @param $wp
  * @return void
  */
 public function parseRequest($wp)
 {
     if (!array_key_exists('herbert_route', $wp->query_vars)) {
         return;
     }
     $data = @json_decode($wp->query_vars['herbert_route'], true);
     $route = null;
     if (isset($data['id']) && isset($this->routes[$this->http->method()][$data['id']])) {
         $route = $this->routes[$this->http->method()][$data['id']];
     } elseif (isset($data['name']) && isset($this->routes['named'][$data['name']])) {
         $route = $this->routes['named'][$data['name']];
     }
     if (!isset($route)) {
         return;
     }
     if (!isset($data['parameters'])) {
         $data['parameters'] = [];
     }
     foreach ($data['parameters'] as $key => $val) {
         if (!isset($wp->query_vars['herbert_param_' . $key])) {
             return;
         }
         $data['parameters'][$key] = $wp->query_vars['herbert_param_' . $key];
     }
     try {
         $this->processRequest($this->buildRoute($route, $data['parameters']));
     } catch (HttpErrorException $e) {
         if ($e->getStatus() === 301 || $e->getStatus() === 302) {
             $this->processResponse($e->getResponse());
             die;
         }
         if ($e->getStatus() === 404) {
             global $wp_query;
             $wp_query->set_404();
         }
         status_header($e->getStatus());
         define('HERBERT_HTTP_ERROR_CODE', $e->getStatus());
         define('HERBERT_HTTP_ERROR_MESSAGE', $e->getMessage());
         if ($e->getStatus() === 404) {
             @(include get_404_template());
         } else {
             echo $e->getMessage();
         }
     }
     die;
 }
コード例 #2
0
 /**
  * Return the correct callable based on action
  *
  * @param  array   $panel
  * @param  boolean $strict
  * @return void
  */
 protected function handler($panel, $strict = false)
 {
     $callable = $uses = $panel['uses'];
     $method = strtolower($this->http->method());
     $action = strtolower($this->http->get('action', 'uses'));
     $callable = array_get($panel, $method, false) ?: $callable;
     if ($callable === $uses || is_array($callable)) {
         $callable = array_get($panel, $action, false) ?: $callable;
     }
     if ($callable === $uses || is_array($callable)) {
         $callable = array_get($panel, "{$method}.{$action}", false) ?: $callable;
     }
     if (is_array($callable)) {
         $callable = $uses;
     }
     if ($strict && $uses === $callable) {
         return false;
     }
     try {
         $this->call($callable);
     } catch (HttpErrorException $e) {
         if ($e->getStatus() === 301 || $e->getStatus() === 302) {
             $this->call(function () use(&$e) {
                 return $e->getResponse();
             });
         }
         global $wp_query;
         $wp_query->set_404();
         status_header($e->getStatus());
         define('HERBERT_HTTP_ERROR_CODE', $e->getStatus());
         define('HERBERT_HTTP_ERROR_MESSAGE', $e->getMessage());
         Notifier::error('<strong>' . $e->getStatus() . '</strong>: ' . $e->getMessage());
         do_action('admin_notices');
     }
     return true;
 }