コード例 #1
0
ファイル: Router.php プロジェクト: bashka/bricks_cli_routing
 /**
  * Выполняет поиск маршрута и вызов обработчика в случае успеха.
  *
  * Маршруты обрабатываются в порядке их регистрации, при этом обработка 
  * останавливается при нахождении первого подходящего маршрута.
  * Пример обработки ошибки маршрутизации:
  *     $router = new Router;
  *     $router->route(['a' => '/^help$/'], 'helpAction', 'EntityController');
  *     try{
  *       $router->run(new Call('a:'));
  *     catch(RoutingException $e){
  *       echo 'Invalid action';
  *       return 1;
  *     }
  *
  * @param Call $call Объект запроса.
  *
  * @throws RoutingException Выбрасывается в случае ошибки маршрутизации 
  * (отсутствия подходящего обработчика запроса).
  *
  * @return mixed Данные, возвращаемые вызванным обработчиком.
  */
 public function run(Call $call)
 {
     foreach ($this->map as $options) {
         $success = true;
         foreach ($options['pattern'] as $opt => $pattern) {
             $opt = $call->opt($opt);
             if (is_null($opt) || !preg_match($pattern, $opt)) {
                 $success = false;
                 break;
             }
         }
         if ($success) {
             return $this->call($call, $options['callback'], $options['context']);
         }
     }
     throw new RoutingException('Invalid call');
 }