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.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
.
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>
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');
}
}
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!