2016-03-24 3 views
0

В Sonata Admin в одном из моих разделов я хотел бы отключить действие delete для 4 конкретных записей/строк.Отключить действие для определенных записей

Я знаю, что могу сделать это для всего списка с помощью configureRoutes(), но ничего не смог найти для конкретных записей. Я пробовал следующее, но getSubject() всегда пуст.

protected function configureRoutes(RouteCollection $collection) 
{ 
    $product = $this->getSubject(); 
    if ($product && $product->getIsBase()) 
    { 
     $collection->clearExcept(array('list', 'edit')); 
    } 
} 

Благодаря

ответ

1

Вы должны переопределить метод isGranted в классе администратора:

public function isGranted($name, $object = null) 
{ 
    if (in_array($name, array('LIST', 'EDIT')) && $object && $object->getIsBase()) { 
     return false; 
    } 

    return parent::isGranted($name, $object); 
} 
+0

Почти то, что мне нужно. Мне нужно только отключить действие delete, поэтому я сделал 'if (in_array ($ name, array ('DELETE')) && $ object && $ object-> getIsBase()), который работает хорошо, спасибо. Тем не менее, я все еще могу удалить свою строку с помощью массовых действий :( – AdrienXL

+0

В этом случае вы можете вообще отключить массовое удаление или (если вам нужны массовые действия) расширить CRUD-контроллер своим собственным и переопределить метод массового действия –