Version

Documentation » Admin

7. Saving hooks »

« 5. Dashboard

6. Routing

The default routes used in the CRUD controller are accessible through the Admin class.

The Admin class contains two routing methods:

  • getRoutes(): Returns the available routes;
  • generateUrl($name, $options): Generates the related routes.

6.1. Routing Definition

You can set a baseRouteName property inside your Admin class, which represents the route prefix.

<?php
class PostAdmin extends Admin
{
    protected $baseRouteName = 'news_post_admin';
}

If no baseRouteName is defined then the Admin will pick one for you, built in the following format: ‘admin_vendor_bundlename_entityname_action’. If the Admin fails to find the best baseRouteName then a RuntimeException will be thrown.

The same goes for the baseRoutePattern.

6.2. Routing usage

Inside a CRUD template, a route can be generated by using the Admin class.

<a href="{{ admin.generateUrl('list') }}">List</a>

<a href="{{ admin.generateUrl('list', params|merge('page': 1) }}">List</a>

6.3. Create a route

You can easily register new routes by defining them in the Admin class. Only Admin routes should be registered this way. Of course this requires the related action to be defined in the controller.

As route is always generated with the Admin context, it can only be defined by its name.

<?php
use Sonata\AdminBundle\Route\RouteCollection;

class MediaAdmin extends Admin
{
    protected function configureRoutes(RouteCollection $collection)
    {
        $collection->add('duplicate');
        $collection->add('view', $this->getRouterIdParameter().'/view');
    }
}

6.4. Persistent parameters

In some cases, the interface might be required to pass the same parameters across the different Admin‘s actions. Instead of setting them in the template or doing other weird hacks, you can define a getPersistentParameters method. This method will be used when a link is being generated.

<?php
class MediaAdmin extends Admin
{
    public function getPersistentParameters()
    {
        if (!$this->getRequest()) {
            return array();
        }

        return array(
            'provider' => $this->getRequest()->get('provider'),
            'context'  => $this->getRequest()->get('context', 'default'),
        );
    }
}

// the result :
//   $admin->generateUrl('create') => /admin/module/create?context=default

Found a typo? Something is wrong in this documentation? Just fork and edit it!