2016-11-04 7 views
4

Как узнать, какие опции доступны в качестве третьего аргумента ListMapper->add() в SonataAdminBundle. (То же самое с DatagridMapper->add() и FormMapper->add()).Как узнать, какие опции доступны в качестве третьего аргумента ListMapper-> add() в SonataAdminBundle

Вы говорите, что есть связь с вариантами http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_list.html#options

но есть также несколько здесь http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_list.html#visual-configuration

Как узнать, есть ли еще варианты? Отлично, если кто-то указывает, как узнать, что из кода сонаты (возможно, класс ListMapper).

Поскольку f.e. Я хочу уменьшить размер текста в ячейке, если он слишком велик, и я не знаю, могу ли я использовать параметр третьего аргумента или мне нужно переопределить шаблон.

+1

http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_list.html#options – yceruto

+0

ОК, это было легко. Как насчет третьего аргумента 'FormMapper-> add()'? Как узнать, что я могу использовать f.e. '' read_only '=> true'.Как я случайно нашел это где-то, но не в документации. – user6827096

+0

'DatagridMapper-> add()' http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_list.html#filters – yceruto

ответ

3

Проблема заключается в том, что параметры сохраняются в родной PHP массива а и используется «на лету» шаблонами, DoctrineORM пачке, и т.д. ... так что не существует простой способ найти исчерпывающий список всех из них.

Однако, я нашел решение перечислить почти все варианты ListMapper (некоторые из DatagridMapper, но это действительно трудно differenciate их).

Вот они:

_sort_order 
admin_code 
ajax_hidden 
association_mapping 
code 
editable 
field_mapping 
field_name 
field_options 
field_type 
format 
global_search 
header_class 
header_style 
identifier 
label 
mapping_type 
name 
operator_options 
operator_type 
options 
parameters 
parent_association_mappings 
route 
route.name 
route.parameters 
row_align 
sort_field_mapping 
sort_parent_association_mappings 
sortable 
timezone 
translation_domain 
virtual_field 

Чтобы получить этот список, у меня была идея сделать функцию SonataAdminBundle \ Admin \ BaseFieldDescription :: getOptions() возвращает пользовательский объект массива, что журналы каждый звонок до isset, unset, геттеры и сеттеры (с оператором скобок). Я также регистрирую SonataAdminBundle \ Admin \ BaseFieldDescription :: getOption ($ name, $ default = null) звонки.

Код связанные:

  • TestBundle \ ArrayTest

    namespace TestBundle; 
    
    class ArrayTest implements \ArrayAccess 
    { 
        private $container = array(); 
        private $previousOffset; 
    
        public function __construct($array, $previousOffset = null) { 
         $this->container = $array; 
         $this->previousOffset = $previousOffset; 
        } 
    
        public function offsetSet($offset, $value) { 
         if (is_null($offset)) { 
          $this->container[] = $value; 
         } else { 
          $this->dump($offset); 
          $this->container[$offset] = $value; 
         } 
        } 
    
        public function offsetExists($offset) { 
         $this->dump($offset); 
         return isset($this->container[$offset]); 
        } 
    
        public function offsetUnset($offset) { 
         $this->dump($offset); 
         unset($this->container[$offset]); 
        } 
    
        public function offsetGet($offset) { 
         $this->dump($offset); 
         if (isset($this->container[$offset])) { 
          if (is_array($this->container[$offset])) { 
           $newOffset = ($this->previousOffset ?: '').$offset.'.'; 
    
           if ($newOffset === 'route.parameter.') { // because of Sonata\AdminBundle\Admin\AbstractAdmin::generateObjectUrl() 
            return $this->container[$offset]; 
           } 
           return new ArrayTest($this->container[$offset], $newOffset); 
          } 
    
          return $this->container[$offset]; 
         } 
         return null; 
        } 
    
        private function dump($offset) 
        { 
         $offset = ($this->previousOffset ?: '').$offset; 
         file_put_contents("/tmp/toto.txt", $offset."\n", FILE_APPEND); 
        } 
    } 
    
  • SonataAdminBundle \ Admin \ BaseFieldDescription :: getOption ($ имя, $ умолчанию = NULL)

    public function getOption($name, $default = null) 
    { 
        file_put_contents("/tmp/toto.txt", $name."\n", FILE_APPEND); 
        return isset($this->options[$name]) ? $this->options[$name] : $default; 
    } 
    
  • SonataAdminBundle \ Admin \ BaseFieldDescription :: getOptions()

    прототип

    новой функции в: getOptions ($ fakeArray = TRUE)

    public function getOptions($fakeArray = true) 
    { 
        if ($fakeArray) { 
         return new \TestBundle\ArrayTest($this->options); 
        } 
    
        return $this->options; 
    } 
    
  • соната \ DoctrineORMAdminBundle \ Builder \ DatagridBuilder :: AddFilter (DatagridInterface $ datagrid, $ type, FieldDescriptionInterface $ fieldDescription, AdminInterface $ admin)

    Линия 129:

    $filter = $this->filterFactory->create($fieldDescription->getName(), $type, $fieldDescription->getOptions()); 
    

    в

    $filter = $this->filterFactory->create($fieldDescription->getName(), $type, $fieldDescription->getOptions(false)); 
    

Затем отобразить список на сонатной администратора, и запустить cat /tmp/toto.txt | sort -u, чтобы получить список выше.

Чтобы получить этот список параметров, я отобразил список администраторов SonataUserBundle. Вы можете найти другие параметры, отображающие другой список администраторов (например, для других шаблонов).


N.B.: Я побежал это на чистую установку Symfony 2.8.11, SonataAdminBundle 3.8.0, SonataDoctrineORMAdminBundle 3.1.0 и SonataUserBundle 3.0.1.

+2

награда за награду, отличная работа! – greg0ire

+1

Благодарю вас как greg0ire, так и Kadriles. – user6827096

1

После поиск в Сонате Код комплекта, нет в документации!
Я думаю, что у вас есть эти опции:

  1. типа
  2. шаблон
  3. помощь
  4. заполнитель
  5. link_parameters

регистрация: соната \ AdminBundle \ Admin \ BaseFieldDescription: : setOptions (параметры массива $)

Вы можете сделать все сразу, как это:

->add('_action','actions',array(
            'actions'=>array(
             'view'=>array(), 
             'edit'=>array(), 
             'delete'=>array() 
             ) 
           ) 
     ) 

Мы не используем больше SonataAdmin, лучше с моими собственными контроллерами, заполняющих желания проекта.

Раствора для ваших нужд является использовать шаблон с некоторым прутиком:

->add('first_name', null,array(
     'template'=>'AppBundle:User:_partial_with_some_template.html.twig',) 
     ) 

Я надеюсь, что это поможет! :)
Удачи!