/** * 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); }
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'); }
$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');
/** * @param string $pattern * @param Endpoint $to * @return \Silex\Controller */ public function patch($pattern, $to = null) { return parent::patch($pattern, $to); }