如何知道SonataAdminBundle中ListMapper->add()
的第三个参数可用的选项。 (与DatagridMapper->add()
和FormMapper->add()
相同)。
您说有一个包含选项http://symfony.com/doc/current/bundles/SonataAdminBundle/reference/action_list.html#options
的链接我如何知道是否有更多选择?如果有人指出如何从Sonata代码(也许是ListMapper类)发现它,那就完美了。
因为f.e.我希望减少单元格中文本的大小,如果它太大,我不知道我是否可以使用某些第三个参数选项,或者我需要覆盖模板。
答案 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代码中进行一些搜索后,不在文档中! 我想你有这个选择:
签入: 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',)
)
我希望这会对你有所帮助! :)
玩得开心!