默认设置 easyadmin_autocomplete Select Null。交响乐

Set easyadmin_autocomplete Select Null by default. Symfony

我想知道是否有任何方法可以将 null 值按 default 放入 easyadmin_autocomplete select.

列表中的第一项是 selected 并填充了来自数据库的数据,但默认情况下我需要一个 null 值并自动设置。目标是第一个结果指向一个空的(选择一个...)。

你知道怎么做吗?

你能想出任何方法来组合下面定义的选项吗?

#easy_admin.yml
Product:
      class: App\Entity\Product
      controller: App\Controller\ProductController
      new:
        fields:
          - { property: 'category', label: 'Category', type: 'easyadmin_autocomplete', type_options: { class: 'App\Entity\Category' } }
 }

在这个例子中,一个 select 有一个 placeholder 和文本 'Any' (Ninguno)。我需要知道为什么处理它们不同。 这些是为 yml:

的属性 字段 -> type_options 定义的选项
  1. 动作
  2. allow_extra_fields
  3. allow_file_upload
  4. 属性
  5. auto_initialize
  6. block_name
  7. by_reference
  8. class
  9. 化合物
  10. 约束
  11. csrf_field_name
  12. csrf_message
  13. csrf_protection
  14. csrf_token_id
  15. csrf_token_manager
  16. 数据
  17. data_class
  18. 已禁用
  19. empty_data
  20. error_bubbling
  21. error_mapping
  22. extra_fields_message
  23. 帮助
  24. help_attr
  25. inherit_data
  26. invalid_message
  27. invalid_message_参数
  28. 标签
  29. label_attr
  30. label_format
  31. 已映射
  32. 方法
  33. 多个
  34. post_max_size_message
  35. property_path
  36. 需要
  37. translation_domain
  38. trim
  39. upload_max_size_message
  40. validation_groups

无法为 easyadmin_autocomplete 设置类似值的占位符。 选择类型的正常方法是使用 placeholder 选项,如 symfony documentation 中所述。但是 easyadmin_autocomplete 不扩展该类型,它是一个独立的类型。您不能将选择类型或实体类型与占位符选项一起使用吗? easyadmin_autocomplete 类型的唯一需要是如果有很多实体,如果所有实体都加载到页面上,它会减慢应用程序。

我最好的选择是您可以扩展 easyadmin_autocomplete。因为 easyadmin_autocomplete 使用 EntityType 你可以在扩展类型的 configureOptions 方法中添加占位符选项。这会将选项委托给 EntityType 但即便如此,它也不会显示在 html 中,因为 select2 javascript 也需要修改。

如果必须的话,我推荐扩展类型的方法,添加选项,并将自定义 javascript 添加到 easyadmin,它将处理新类型并添加占位符选项。您可以查看 select2 documentation 如何设置占位符。

但是,如果您可以为您的 select 使用实体或选择类型,那么它是首选解决方案。

如果设置默认值对您来说是一个解决方案(如零),服务侦听器可能是一个答案:

// You need to add this listener yourself:
class ProductServiceListener
{
    ...

    // you can manipulate entity in this level as you wish:
    public function preUpdate(LifeCycleEventArgs $args)
    {

       // You will focus to Product entity, so block others:
       if (!(get_class($entity) == 'App\Entity\Product')) {
           return;
        }

        // Set whatever default value you want if it's null:
        if($entity->getCategory() == null) {
           $entity->setCategory(0); // Zero, as an example.
        }