Thursday 15 April 2010

Symfony2 - Sonata Admin - Edit/Create "return to list" action -



Symfony2 - Sonata Admin - Edit/Create "return to list" action -

i have sonata admin entity many elements naturally spans multiple pages in list view.

what i'd create after editing, or creating new entity, redirect user appropriate page displays edited entity (as opposed going list's first page default behavior of sonata admin). dafult behavior ok when there 1 or 2 pages when have tens or hundreds of pages, navigating right page becomes quite tedious.

so question appropriate way create happen?

i'm thinking involve customizing admin controller entity i'm not sure right extension points are. , also, how utilize paginator obtain right page navigate to.

another potential hack capture query parameters state when navigating list view edit, , returning user same url. won't work correctly creating new items.

there's matter of state of filters when navigating list view (if user had sorted and/or filtered list before navigating edit page).

i know i'm late can useful else... here way i've made it, overriding adminbundle crudcontroller:

<?php namespace myproject\adminbundle\controller; utilize sonata\adminbundle\controller\crudcontroller basecontroller; utilize symfony\component\httpfoundation\request; utilize symfony\component\httpfoundation\redirectresponse; class crudcontroller extends basecontroller { protected function redirectto($object, request $request = null) { $response = parent::redirectto($object, $request); if (null !== $request->get('btn_update_and_list') || null !== $request->get('btn_create_and_list')) { $url = $this->admin->generateurl('list'); $last_list = $this->get('session')->get('last_list'); if(strstr($last_list['uri'], $url) && !empty($last_list['filters'])) { $response = new redirectresponse($this->admin->generateurl( 'list', array('filter' => $last_list['filters']) )); } } homecoming $response; } public function listaction(request $request = null) { $uri_parts = explode('?', $request->geturi(), 2); $filters = $this->admin->getfilterparameters(); $this->get('session')->set('last_list', array('uri' => $uri_parts[0], 'filters' => $filters)); $response = parent::listaction($request); homecoming $response; } }

symfony2 sonata-admin

No comments:

Post a Comment