[英]Sonata Admin Bundle: Editable suggest field in list view
在列表字段中,您可以通過在 configureListFields 操作中將屬性“editable”設置為“true”來使字段可編輯。 是否有可能(使用板載奏鳴曲管理工具)使包含多個值的字段可編輯,如一對多關系?
示例:我在列表視圖中列出了一個學生列表。 每個學生在學生列表視圖的班級列中都有多個班級列表。 通過單擊類,我想要一個彈出窗口打開(就像它與普通字符串一起工作)和一個建議字段,就像你可以在編輯視圖中一樣。
使用 configFormFields 操作中的屬性不起作用:
$listMapper->add(
'classes',null, array(
'editable' => true,
'type' => 'sonata_type_model_autocomplete',
'multiple' => true,
'property' => 'name'
)
);
該代碼段寫在 configureListFields 操作中的 PupilsAdmin 類中。
是否可能或我必須創建自定義模板? 文檔沒有指出我正確的方向: https : //sonata-project.org/bundles/admin/2-2/doc/reference/field_types.html
如果我理解正確,您想在奏鳴曲的列表視圖中內聯編輯一對多關系。 據我所知,這僅適用於文本、整數或選擇等簡單類型。 他們在你的鏈接中指出了沒有 18.
這些類型接受可編輯參數以從列表操作中編輯值。 目前僅限於標量類型(文本、整數、url...)。
因此相關對象不能在該列表中,只能是它們的標量屬性。 對於所有其他事情,您必須編寫自己的模板......
我不知道你想用這個建議的列表實現什么,但對我來說,在列表視圖中編輯一對多屬性是沒有意義的,就像在編輯視圖中所做的那樣。
您只需要創建新類型。 類似“實體”的東西
'header_class' => 'col-lg-1',
'class' => Employee::class,
'editable' => true,
])
下一步是覆蓋 listBuilder 中的 fixFieldDescription 方法並處理它
class EntityListBuilder extends ListBuilder
{
/**
* @var Registry
*/
private $doctrine;
/**
* @param AdminInterface $admin
* @param FieldDescriptionInterface $fieldDescription
*/
public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription)
{
parent::fixFieldDescription($admin, $fieldDescription);
if ($fieldDescription->getType() === 'entity') {
$class = $fieldDescription->getOption('class');
if (!$class) {
throw new RuntimeException("Type entity must contain 'class' argument");
}
$objects = $this->doctrine->getRepository($class)->findAll();
$choices = [];
foreach ($objects as $object) {
$choices[$object->getId()] = $object->__toString();
}
$fieldDescription->setOption('choices', $choices);
$fieldDescription->setType('choice');
}
}
/**
* @param Registry $doctrine
*/
public function setDoctrine(Registry $doctrine)
{
$this->doctrine = $doctrine;
}
/**
* @param string $type
*
* @return string
*/
private function getTemplate($type)
{
return $this->templates[$type] ?? '';
}
現在,您必須覆蓋“實體”類型的模板
{% extends '@SonataAdmin/CRUD/list_choice.html.twig' %}
{% set value = admin.id(value) %}
需要設置已經選擇的值來選擇框 好的,最后一件事是將我們的類型添加到可編輯類型的 Twig 將其添加到 OverrideServiceCompilerPass :
$definition = $container->getParameter('sonata.admin.twig.extension.x_editable_type_mapping');
$definition['entity'] = 'select';
$container->setParameter('sonata.admin.twig.extension.x_editable_type_mapping', $definition);
最后一個只是將您的類型與模板匹配
templates:
types:
list:
...
entity: AppBundle:CRUD:list_entity.html.twig
現在您准備好內聯編輯它:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.