2015-03-13 3 views
0

У меня возникла проблема с администратором сонаты. Есть ли способ отключить «просмотр списка»? Я хотел бы получить первый объект в базе данных и продолжить его, щелкнув ссылку на боковой панели. Но не для всех записей.Sonata Admin - отключить просмотр списка

Есть ли чистый способ сделать это? (У меня есть идея проверить объект в пользовательском контроллере и перенаправить на просмотр списка или отредактировать представление в зависимости от объекта, но это действительно не clean)

ответ

2

Если вы хотите сделать заказный запрос для своего просмотр списка, можно переопределить метод CreateQuery в классе администратора, как это:

class EntityAdmin 
{ 
    public function createQuery($context = 'list') 
    { 
     $query = parent::createQuery($context); 
     $query->andWhere(
      $query->expr()->eq($query->getRootAlias() . '.id', ':id') 
     ); 
     $query->setParameter('id', 1); 

     return $query; 
    } 
} 

у вас будет только первый объект в вашем списке.

UPDATE

Вы можете переопределить standard_layout.html.twig изменить ссылку в боковой панели:

Прежде всего, необходимо установить, где ваш шаблон находится:

приложение/конфигурации /config.yml

sonata_admin: 
    templates: 
     layout: ApplicationSonataAdminBundle::standard_layout.html.twig 

Изменить поведение боковой панели, для Sonata Admin 2.3 это как вы это делаете:

src/Application/Sonata/AdminBundle/Resources/Views/standard_layout.html.twig l.224

<ul class="treeview-menu{% if active %} active{% endif %}"> 
    {% for admin in group.items %} 
     {% if admin.code == 'sonata.admin.entity' and 
       admin.hasroute('edit') and 
       admin.isGranted('EDIT') %} 
      <li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('edit', {'id' : 1}) }}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li> 
     {% else %} 
      {% if admin.hasroute('list') and admin.isGranted('LIST') %} 
       <li{% if app.request.get('_sonata_admin') == admin.code %} class="active"{% endif %}><a href="{{ admin.generateUrl('list')}}"><i class="fa fa-angle-double-right"></i> {{ admin.label|trans({}, admin.translationdomain) }}</a></li> 
      {% endif %} 
     {% endif %} 
    {% endfor %} 
</ul> 

Вы должны изменить '' sonata.admin.entity по identifier of your admin service.

Кроме того, если вы хотите удалить доступ к списку следует добавить в своем классе администратора

use Sonata\AdminBundle\Route\RouteCollection; 

class EntityAdmin 
{ 
    protected function configureRoutes(RouteCollection $collection) 
    { 
     $collection->remove('list'); 
    } 
} 
+0

Спасибо, но я хочу, чтобы избежать представления списка. Я нажимаю ссылку в боковой панели, и я перенаправляюсь в режим редактирования для первого элемента. – Peekmo

+0

Хорошо, я обновил свой ответ, исходя из ваших потребностей. – HypeR

+0

Спасибо большое :) – Peekmo

Смежные вопросы