/**
  * @param \Sonata\AdminBundle\Admin\AdminInterface  $admin
  * @param \Sonata\AdminBundle\Route\RouteCollection $collection
  */
 public function build(AdminInterface $admin, RouteCollection $collection)
 {
     $collection->add('list');
     $collection->add('create');
     $collection->add('batch');
     $collection->add('edit');
     $collection->add('delete');
     $collection->add('show');
     $collection->add('export');
     if ($this->manager->hasReader($admin->getClass())) {
         $collection->add('history', '/audit-history');
         $collection->add('history_view_revision', '/audit-history-view');
     }
     if ($admin->isAclEnabled()) {
         $collection->add('acl', $admin->getRouterIdParameter() . '/acl');
     }
     // an admin can have only one level of nested child
     if ($admin->getParent()) {
         return;
     }
     // add children urls
     foreach ($admin->getChildren() as $children) {
         $collection->addCollection($children->getRoutes());
     }
 }
 /**
  * RouteBuilder that allowes slashes in the ids.
  *
  * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
  * @param \Sonata\AdminBundle\Route\RouteCollection $collection
  */
 function build(AdminInterface $admin, RouteCollection $collection)
 {
     $collection->add('list');
     $collection->add('create');
     $collection->add('batch');
     $collection->add('edit', $admin->getRouterIdParameter() . '/edit', array(), array('id' => '.+'));
     $collection->add('delete', $admin->getRouterIdParameter() . '/delete', array(), array('id' => '.+'));
     $collection->add('show', $admin->getRouterIdParameter(), array(), array('id' => '.+', '_method' => 'GET'));
     // add children urls
     foreach ($admin->getChildren() as $children) {
         $collection->addCollection($children->getRoutes());
     }
 }
 public function testChildCollection()
 {
     $childCollection = new RouteCollection('baseCodeRouteChild', 'baseRouteNameChild', 'baseRoutePatternChild', 'baseControllerNameChild');
     $childCollection->add('view');
     $childCollection->add('create');
     $parentCollection = new RouteCollection('baseCodeRoute', 'baseRouteName', 'baseRoutePattern', 'baseControllerName');
     $parentCollection->add('view');
     $parentCollection->add('edit');
     $parentCollection->addCollection($childCollection);
     $this->assertTrue($parentCollection->has('view'));
     $this->assertTrue($parentCollection->has('edit'));
     $this->assertFalse($parentCollection->has('create'));
     $this->assertFalse($parentCollection->has('baseCodeRouteChild.edit'));
 }
 /**
  * RouteBuilder that allows slashes in the ids.
  *
  * {@inheritDoc}
  */
 function build(AdminInterface $admin, RouteCollection $collection)
 {
     $collection->add('list');
     $collection->add('create');
     $collection->add('batch', null, array(), array('_method' => 'POST'));
     $collection->add('edit', $admin->getRouterIdParameter() . '/edit', array(), array('id' => '.+'));
     $collection->add('delete', $admin->getRouterIdParameter() . '/delete', array(), array('id' => '.+'));
     $collection->add('export');
     $collection->add('show', $admin->getRouterIdParameter() . '/show', array(), array('id' => '.+', '_method' => 'GET'));
     if ($admin->isAclEnabled()) {
         $collection->add('acl', $admin->getRouterIdParameter() . '/acl', array(), array('id' => '.+'));
     }
     // add children urls
     foreach ($admin->getChildren() as $children) {
         $collection->addCollection($children->getRoutes());
     }
 }
Пример #5
0
    /**
     * Build all the related urls to the current admin
     *
     * @return void
     */
    public function buildRoutes()
    {
        if ($this->loaded['routes']) {
            return;
        }

        $this->loaded['routes'] = true;

        $collection = new RouteCollection(
            $this->getBaseCodeRoute(),
            $this->getBaseRouteName(),
            $this->getBaseRoutePattern(),
            $this->getBaseControllerName()
        );

        $collection->add('list');
        $collection->add('create');
        $collection->add('batch');
        $collection->add('edit', $this->getRouterIdParameter().'/edit');
        $collection->add('delete', $this->getRouterIdParameter().'/delete');
        $collection->add('show', $this->getRouterIdParameter().'/show');

        // add children urls
        foreach ($this->getChildren() as $children) {
            $collection->addCollection($children->getRoutes());
        }

        $this->configureRoutes($collection);

        $this->routes = $collection;
    }
 /**
  * @dataProvider getGenerateUrlParentFieldDescriptionTests
  */
 public function testGenerateUrlParentFieldDescription($expected, $name, array $parameters)
 {
     $childCollection = new RouteCollection('base.Code.Parent|base.Code.Child', 'admin_acme_child', '/foo/', 'BundleName:ControllerName');
     $childCollection->add('bar');
     $collection = new RouteCollection('base.Code.Parent', 'admin_acme', '/', 'BundleName:ControllerName');
     $collection->add('foo');
     $collection->addCollection($childCollection);
     $admin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface');
     $admin->expects($this->any())->method('isChild')->will($this->returnValue(false));
     $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Parent'));
     // embeded admin (not nested ...)
     $admin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(true));
     $admin->expects($this->once())->method('hasRequest')->will($this->returnValue(true));
     $admin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid'));
     $admin->expects($this->any())->method('getCode')->will($this->returnValue('foo_code'));
     $admin->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456')));
     $admin->expects($this->any())->method('getExtensions')->will($this->returnValue(array()));
     $admin->expects($this->any())->method('getRoutes')->will($this->returnValue($collection));
     $router = $this->getMock('Symfony\\Component\\Routing\\RouterInterface');
     $router->expects($this->once())->method('generate')->will($this->returnCallback(function ($name, array $parameters = array()) {
         $params = '';
         if (!empty($parameters)) {
             $params .= '?' . http_build_query($parameters);
         }
         switch ($name) {
             case 'admin_acme_foo':
                 return '/foo' . $params;
             case 'admin_acme_child_bar':
                 return '/foo/bar' . $params;
         }
         return null;
     }));
     $fieldDescription = $this->getMock('Sonata\\AdminBundle\\Admin\\FieldDescriptionInterface');
     $fieldDescription->expects($this->once())->method('getOption')->will($this->returnValue(array()));
     $parentAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface');
     $parentAdmin->expects($this->any())->method('getUniqid')->will($this->returnValue('parent_foo_uniqueid'));
     $parentAdmin->expects($this->any())->method('getCode')->will($this->returnValue('parent_foo_code'));
     $parentAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array()));
     $fieldDescription->expects($this->any())->method('getAdmin')->will($this->returnValue($parentAdmin));
     $admin->expects($this->any())->method('getParentFieldDescription')->will($this->returnValue($fieldDescription));
     $cache = new RoutesCache($this->cacheTempFolder, true);
     $generator = new DefaultRouteGenerator($router, $cache);
     $this->assertEquals($expected, $generator->generateUrl($admin, $name, $parameters));
 }
 /**
  * @dataProvider getGenerateUrlLoadCacheTests
  */
 public function testGenerateUrlLoadCache($expected, $name, array $parameters)
 {
     $childCollection = new RouteCollection('base.Code.Parent|base.Code.Child', 'admin_acme_child', '/foo', 'BundleName:ControllerName');
     $childCollection->add('bar');
     $collection = new RouteCollection('base.Code.Parent', 'admin_acme', '/', 'BundleName:ControllerName');
     $collection->add('foo');
     $collection->addCollection($childCollection);
     $standaloneCollection = new RouteCollection('base.Code.Child', 'admin_acme_child_standalone', '/', 'BundleName:ControllerName');
     $standaloneCollection->add('bar');
     $admin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface');
     $admin->expects($this->any())->method('isChild')->will($this->returnValue(true));
     $admin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Child'));
     $admin->expects($this->any())->method('getBaseCodeRoute')->will($this->returnValue('base.Code.Parent|base.Code.Child'));
     $admin->expects($this->any())->method('getIdParameter')->will($this->returnValue('id'));
     $admin->expects($this->any())->method('hasParentFieldDescription')->will($this->returnValue(false));
     $admin->expects($this->any())->method('hasRequest')->will($this->returnValue(true));
     $admin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid'));
     $admin->expects($this->any())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456')));
     $admin->expects($this->any())->method('getRoutes')->will($this->returnValue($childCollection));
     $admin->expects($this->any())->method('getExtensions')->will($this->returnValue(array()));
     $parentAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface');
     $parentAdmin->expects($this->any())->method('getIdParameter')->will($this->returnValue('childId'));
     $parentAdmin->expects($this->any())->method('getRoutes')->will($this->returnValue($collection));
     $parentAdmin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Parent'));
     $parentAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array()));
     // no request attached in this test, so this will not be used
     $parentAdmin->expects($this->never())->method('getPersistentParameters')->will($this->returnValue(array('from' => 'parent')));
     $request = $this->getMock('Symfony\\Component\\HttpFoundation\\Request');
     $request->attributes = $this->getMock('Symfony\\Component\\HttpFoundation\\ParameterBag');
     $request->attributes->expects($this->any())->method('has')->will($this->returnValue(true));
     $request->attributes->expects($this->any())->method('get')->will($this->returnCallback(function ($key) {
         if ($key == 'childId') {
             return '987654';
         }
         return;
     }));
     $admin->expects($this->any())->method('getRequest')->will($this->returnValue($request));
     $admin->expects($this->any())->method('getParent')->will($this->returnValue($parentAdmin));
     $standaloneAdmin = $this->getMock('Sonata\\AdminBundle\\Admin\\AdminInterface');
     $standaloneAdmin->expects($this->any())->method('isChild')->will($this->returnValue(false));
     $standaloneAdmin->expects($this->any())->method('getCode')->will($this->returnValue('base.Code.Child'));
     $standaloneAdmin->expects($this->once())->method('hasParentFieldDescription')->will($this->returnValue(false));
     $standaloneAdmin->expects($this->once())->method('hasRequest')->will($this->returnValue(true));
     $standaloneAdmin->expects($this->any())->method('getUniqid')->will($this->returnValue('foo_uniqueid'));
     $standaloneAdmin->expects($this->once())->method('getPersistentParameters')->will($this->returnValue(array('abc' => 'a123', 'efg' => 'e456')));
     $standaloneAdmin->expects($this->any())->method('getRoutes')->will($this->returnValue($standaloneCollection));
     $standaloneAdmin->expects($this->any())->method('getExtensions')->will($this->returnValue(array()));
     $router = $this->getMock('\\Symfony\\Component\\Routing\\RouterInterface');
     $router->expects($this->exactly(2))->method('generate')->will($this->returnCallback(function ($name, array $parameters = array()) {
         $params = '';
         if (!empty($parameters)) {
             $params .= '?' . http_build_query($parameters);
         }
         switch ($name) {
             case 'admin_acme_child_bar':
                 return '/foo/bar' . $params;
             case 'admin_acme_child_standalone_bar':
                 return '/bar' . $params;
         }
         return;
     }));
     $cache = new RoutesCache($this->cacheTempFolder, true);
     $generator = new DefaultRouteGenerator($router, $cache);
     // Generate once to populate cache
     $generator->generateUrl($admin, 'bar', $parameters);
     $this->assertEquals($expected, $generator->generateUrl($standaloneAdmin, $name, $parameters));
 }