/**
  * Create a resource and all its sub-resources.
  *
  * @param array $resourceConfig
  * @param array $parentUris
  * @throws \RuntimeException
  */
 public function createResource(array $resourceConfig, array $parentUris = array())
 {
     if (empty($resourceConfig['uri']) || empty($resourceConfig['ctl'])) {
         throw new \RuntimeException('Invalid resource config encountered. Config must contain uri and ctl keys');
     }
     if ($resourceConfig['ctl'] instanceof \Closure) {
         //registers controller factory inline
         $controllerName = $this->registerController($resourceConfig['uri'], $resourceConfig['ctl'], $parentUris);
     } elseif (is_string($resourceConfig['ctl'])) {
         $controllerName = $resourceConfig['ctl'];
     } else {
         throw new \RuntimeException('Ctl must be a factory (Closure) or existing service (string name)');
     }
     //setup routes
     $this->app->get($this->createRouteUri($resourceConfig['uri'], $parentUris, true), sprintf('%s:get', $controllerName));
     $this->app->get($this->createRouteUri($resourceConfig['uri'], $parentUris, false), sprintf('%s:cget', $controllerName));
     $this->app->post($this->createRouteUri($resourceConfig['uri'], $parentUris, false), sprintf('%s:post', $controllerName));
     $this->app->put($this->createRouteUri($resourceConfig['uri'], $parentUris, true), sprintf('%s:put', $controllerName));
     $this->app->patch($this->createRouteUri($resourceConfig['uri'], $parentUris, true), sprintf('%s:patch', $controllerName));
     $this->app->delete($this->createRouteUri($resourceConfig['uri'], $parentUris, true), sprintf('%s:delete', $controllerName));
     //handle sub resources
     if (!empty($resourceConfig['sub'])) {
         if (!is_array($resourceConfig['sub'])) {
             throw new \RuntimeException('sub config must contain array of sub resources');
         }
         //append current uri as parent
         $parentUris[] = $resourceConfig['uri'];
         foreach ($resourceConfig['sub'] as $subResource) {
             $this->createResource($subResource, $parentUris);
         }
     }
 }
 public function testMatchReturnValue()
 {
     $app = new Application();
     $returnValue = $app->match('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
     $returnValue = $app->get('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
     $returnValue = $app->post('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
     $returnValue = $app->put('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
     $returnValue = $app->patch('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
     $returnValue = $app->delete('/foo', function () {
     });
     $this->assertInstanceOf('Silex\\Controller', $returnValue);
 }
Example #3
0
 public function testMethodRouting()
 {
     $app = new Application();
     $app->match('/foo', function () {
         return 'foo';
     });
     $app->match('/bar', function () {
         return 'bar';
     })->method('GET|POST');
     $app->get('/resource', function () {
         return 'get resource';
     });
     $app->post('/resource', function () {
         return 'post resource';
     });
     $app->put('/resource', function () {
         return 'put resource';
     });
     $app->patch('/resource', function () {
         return 'patch resource';
     });
     $app->delete('/resource', function () {
         return 'delete resource';
     });
     $this->checkRouteResponse($app, '/foo', 'foo');
     $this->checkRouteResponse($app, '/bar', 'bar');
     $this->checkRouteResponse($app, '/bar', 'bar', 'post');
     $this->checkRouteResponse($app, '/resource', 'get resource');
     $this->checkRouteResponse($app, '/resource', 'post resource', 'post');
     $this->checkRouteResponse($app, '/resource', 'put resource', 'put');
     $this->checkRouteResponse($app, '/resource', 'patch resource', 'patch');
     $this->checkRouteResponse($app, '/resource', 'delete resource', 'delete');
 }
Example #4
0
$app['collection.service'] = function () use($app) {
    return new CollectionService($app['resource.service'], $app['triplestore'], $app['fedora']);
};
$app['collection.controller'] = function () use($app) {
    return new CollectionController($app['collection.service']);
};
$app['transaction.service'] = function () use($app) {
    return new TransactionService($app['fedora']);
};
$app['transaction.controller'] = function () use($app) {
    return new TransactionController($app['transaction.service']);
};
$app->get('islandora/resource/{id}', 'resource.controller:find');
$app->post('islandora/resource/', 'resource.controller:create');
$app->put('islandora/resource/{id}', 'resource.controller:upsert');
$app->patch('islandora/resource/{id}', 'resource.controller:sparqlUpdate');
$app->delete('islandora/resource/{id}', 'resource.controller:delete');
$app->get('islandora/transaction/{id}', 'transaction.controller:status');
$app->post('islandora/transaction/', 'transaction.controller:create');
$app->post('islandora/transaction/{id}', 'transaction.controller:extend');
$app->post('islandora/transaction/{id}/commit', 'transaction.controller:commit');
$app->post('islandora/transaction/{id}/rollback', 'transaction.controller:rollback');
//$app->get('islandora/members/{id}', 'members.controller:find');
//$app->post('islandora/members/{id}/{child_id}', 'members.controller:add');
//$app->delete('islandora/members/{id}/{child_id}', 'members.controller:remove');
//$app->patch('islandora/members/{id}/{child_id}/{destination_id}', 'members.controller:migrate');
$app->get('islandora/collection/', 'collection.controller:index');
$app->post('islandora/collection/', 'collection.controller:create');
//$app->get('islandora/files/{id}', 'files.controller:find');
//$app->post('islandora/files/{id}/{child_id}', 'files.controller:add');
//$app->delete('islandora/files/{id}/{child_id}', 'files.controller:remove');
Example #5
0
 /**
  * @param string $pattern
  * @param Endpoint $to
  * @return \Silex\Controller
  */
 public function patch($pattern, $to = null)
 {
     return parent::patch($pattern, $to);
 }