예제 #1
0
파일: Mount.php 프로젝트: bdusell/jitsu-app
 public function handle($data)
 {
     /* Match the mount point to the beginning of the route. */
     $saved_route = Util::requireProp($data, 'route');
     list($regex, $mapping) = Util::patternToStartRegex($this->mount_point);
     if (!preg_match($regex, $saved_route, $matches)) {
         return false;
     }
     /* Temporarily modify the route so that it is relative to the
      * sub-router's mount point. */
     $data->route = substr($saved_route, strlen($matches[0]));
     /* Push the matched URL parameters. */
     $parameters = Util::namedMatches($matches, $mapping);
     $had_params = \Jitsu\Util::hasProp($data, 'parameters');
     if ($had_params) {
         $saved_parameters = $data->parameters;
         foreach ($parameters as $key => $value) {
             $data->parameters[$key] = $value;
         }
     } else {
         $data->parameters = $parameters;
     }
     /* Run the sub-router. */
     try {
         $r = $this->router->run($data);
     } catch (\Exception $e) {
     }
     /* Restore the full route. */
     $data->route = $saved_route;
     /* Didn't match? Pop the parameters matched in the router's
      * mount point. */
     if (isset($e) || !$r) {
         if ($had_params) {
             $data->parameters = $saved_parameters;
         } else {
             unset($data->parameters);
         }
     }
     /* Re-throw any exception thrown by the sub-router. */
     if (isset($e)) {
         throw $e;
     }
     /* Stop iff the sub-router matched the route. */
     return $r;
 }
예제 #2
0
파일: Util.php 프로젝트: bdusell/jitsu-app
 public static function ensureArray($data, $name)
 {
     if (!\Jitsu\Util::hasProp($data, $name)) {
         $data->{$name} = array();
     }
 }