我怎么知道哪些选项可用作SonataAdminBundle中ListMapper-> add()的第三个参数

时间:2016-11-04 11:02:48

标签: symfony sonata-admin

如何知道SonataAdminBundle中ListMapper->add()的第三个参数可用的选项。 (与DatagridMapper->add()FormMapper->add()相同)。

您说有一个包含选项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

我如何知道是否有更多选择?如果有人指出如何从Sonata代码(也许是ListMapper类)发现它,那就完美了。

因为f.e.我希望减少单元格中文本的大小,如果它太大,我不知道我是否可以使用某些第三个参数选项,或者我需要覆盖模板。

2 个答案:

答案 0 :(得分:3)

问题是选项存储在本机PHP数组中,并且通过模板,DoctrineORM包等使用“on-the-fly” ...所以那里找到所有这些列表的详尽列表并不是一种简单的方法。

但是,我找到了一个解决方案,列出 ListMapper 的所有选项几乎(有些来自 DatagridMapper ,但实在太难了区分它们。)

他们是:

_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 取消设置,getter和setter(带括号运算符)。我还记录 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($ name,$ default = 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 \管理员\ BaseFieldDescription :: getOptions()

    新功能的原型: getOptions($ fakeArray = true)

    public function getOptions($fakeArray = true)
    {
        if ($fakeArray) {
            return new \TestBundle\ArrayTest($this->options);
        }
    
        return $this->options;
    }
    
  • Sonata \ 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 的管理员列表。您可能会找到更多显示其他管理员列表的选项(例如,使用其他模板)。

NB :我在干净安装的 Symfony 2.8.11 SonataAdminBundle 3.8.0 SonataDoctrineORMAdminBundle 3.1上运行此操作。 0 SonataUserBundle 3.0.1

答案 1 :(得分:1)

在Sonata Bundle代码中进行一些搜索后,不在文档中! 我想你有这个选择:

  1. 模板
  2. 帮助
  3. 占位符
  4. link_parameters
  5. 签入: Sonata \ AdminBundle \ Admin \ BaseFieldDescription :: setOptions(array $ options)

    你可以像这样一起做所有事情:

      ->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',)
           )
    

    我希望这会对你有所帮助! :)
    玩得开心!