drupal 8 BaseFieldDefinition entity_reference с условием

Я не уверен, что это правильный способ реализовать это, поэтому я надеюсь, что вы можете мне помочь. Я пытаюсь сослаться на объект пользовательского контента в Drupal 8 с условием, что должны отображаться только объекты, созданные текущим пользователем.

В основном CUSTOM ENTITY 1 -> CUSTOM ENTITY 2 (созданный пользователем)

Я нашел способ сделать это с помощью представлений, но мне интересно, как это сделать программно.

Обратите внимание, что мне уже удалось получить список идентификаторов и отобразить его в виде раскрывающегося списка, но это не то, что я хочу.

Я хотел бы показать ссылку как автозаполнение.

Это то, что я получил до сих пор:

$fields['dishes'] = BaseFieldDefinition::create('entity_reference')
        ->setLabel(t('Dishes'))
        ->setDescription(t('Select the dishes to add  to this menu'))
        ->setSetting('target_type', 'dish')
        ->setSetting('handler', 'default')
        ->setTranslatable(TRUE)
        ->setCardinality(-1)
        ->setDisplayOptions('view', [
            'label' => 'hidden',
            'type' => 'entity_reference_label',
            'weight' => -1,
        ])
        ->setDisplayOptions('form', [
            'type' => 'entity_reference_autocomplete',
            'weight' => -1,
            'settings' => [
                'match_operator' => 'CONTAINS',
                'size' => '60',
                'autocomplete_type' => 'tags',
                'placeholder' => '',
            ],
        ])
        ->setDisplayConfigurable('form', FALSE)
        ->setDisplayConfigurable('view', TRUE);

Есть ли способ добавить условия к этому? Или настроить запрос, который Drupal делает для получения ссылочного объекта?


person soipo    schedule 03.07.2017    source источник


Ответы (1)


Попробуй это:

`

$fields['subgroup_id'] = BaseFieldDefinition::create('entity_reference')
  ->setLabel(t('Dalinama grupėms'))
  ->setDescription(t('Allocation groups.'))
  ->setSetting('target_type', 'distribution_group')
  ->setSetting('handler', 'views')
  ->setSetting('handler_settings', [
    'view' => [
      'view_name' => 'entity_reference_views_filter',
      'display_name' => 'entity_reference_1',
    ],
  ])
  ->setRequired(TRUE)
  ->setCardinality(1)
  ->setDisplayOptions('view', array(
    'label' => 'above',
    'type' => 'list_default',
    'weight' => -4,
  ))
  ->setDisplayOptions('form', array(
    'type' => 'options_select',
    'settings' => array(
      'match_operator' => 'CONTAINS',
      'size' => 60,
      'placeholder' => '',
    ),
    'weight' => -2,
  ))
  ->setDisplayConfigurable('form', TRUE)
  ->setDisplayConfigurable('view', TRUE);

`

person init90    schedule 15.07.2017
comment
Даже если ваш код работает, без объяснения того, что вы сделали, и ваших аргументов в пользу этого, он не является очень надежным ответом. - person Ziyad Edher; 15.07.2017
comment
Кажется, вы используете ссылку на представление, как и я, мне было интересно, есть ли способ запросить и ввести в автозаполнение значение моего запроса вместо использования представлений. - person soipo; 17.07.2017
comment
Это помогло мне. Также есть похожий пост drupal.stackexchange.com/questions/194804/ - person Daniel; 09.10.2019