public function match(Resource $resource, $routeType, $to)
 {
     $routeClass = $this->routeClass;
     /* @var $route Route */
     $route = new $routeClass();
     $route->setPath($resource->getPath($routeType));
     $route->setDefault('_controller', $to);
     $route->setMethods($resource->getMethods($routeType));
     $this->routeCollection->add($resource->getName($routeType), $route);
     return $route;
 }
 public function register(Container $app)
 {
     if (!$app['resolver'] instanceof ServiceControllerResolver) {
         throw new \RuntimeException('Register ServiceControllerServiceProvider first.');
     }
     foreach (array('all', 'post', 'get', 'put', 'patch', 'delete') as $method) {
         $app['rest.methods.' . $method] = $method;
     }
     $app['rest.annotation_loader'] = function () use($app) {
         return new AnnotationDirectoryLoader(new FileLocator($app['controllers_path']), new AnnotationClassLoader($app['annotation.reader'], $app['rest.rm']));
     };
     $app['rest'] = function () use($app) {
         return new RestService($app['rest.serializer']);
     };
     $app['rest.rm'] = function () use($app) {
         Resource::$defaultMethods = array('all' => $app['rest.methods.all'], 'post' => $app['rest.methods.post'], 'get' => $app['rest.methods.get'], 'put' => $app['rest.methods.put'], 'patch' => $app['rest.methods.patch'], 'delete' => $app['rest.methods.delete']);
         return new ResourceManager($app['routes'], $app, $app['route_class']);
     };
     $app['rest.listener'] = function () use($app) {
         return new RestResponseListener($app['rest'], $app['rest.annotation_loader']);
     };
     $app['rest.serializer'] = function () use($app) {
         $builder = SerializerBuilder::create()->setObjectConstructor(NaturalObjectConstructor::create($app));
         if (isset($app['annotation.reader'])) {
             $builder->setAnnotationReader($app['annotation.reader']);
         }
         return $builder->build();
     };
 }