Дополнительное поле выбора для заказа

Я хочу установить порядок для новой записи. Мне нужен заказ на первую позицию и заказ после одной из существующих записей

Я не знаю, как это сделать в Symfony 4.2.

 public function buildForm(FormBuilderInterface $builder, array $options) {
   $builder
    ->add('nameDe')
    ->add('nameEn')
    ->add('descriptionDe')
    ->add('descriptionEn')
    ->add('rank', EntityType::class, [
        'class' => ProductType::class,
        'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('p')
        ->orderBy('p.rank', 'ASC');
        },
        'choice_label' => 'nameDe', 
    ])
    ->add('active')
    ->add('creatDate')
    ->add('updateDate', DateTimeType::class, array('data' => new \DateTime()));
}

У меня есть это:

<select id = "product_type_rank" name = "product_type[rank]">
    <option value = "1">Internetseiten</option>
    <option value = "2">Printmedia</option>
</select>

мне нужно что-то вроде этого

<select id = "product_type_rank" name = "product_type[rank]">
    <option value = "0">At the beginning</option>
    <option value = "1">after Internetseiten</option>
    <option value = "2">after Printmedia</option>
</select>
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
0
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы хотите добавить параметр по умолчанию в поле EntityType, вы можете добавить параметр-заполнитель, подобный этому.

public function buildForm(FormBuilderInterface $builder, array $options) {
   $builder
    ->add('nameDe')
    ->add('nameEn')
    ->add('descriptionDe')
    ->add('descriptionEn')
    ->add('rank', EntityType::class, [
        'class' => ProductType::class,
        'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('p')
        ->orderBy('p.rank', 'ASC');
        },
        'choice_label' => 'nameDe',
        'placeholder' => 'At the beginning',
    ])
    ->add('active')
    ->add('creatDate')
    ->add('updateDate', DateTimeType::class, array('data' => new \DateTime()));
}

Как я вижу, вы обрабатываете несколько языков в своей форме, если вы хотите интернационализировать свой заполнитель, просто поместите ключ перевода непосредственно в значение (вам нужно установить пакет перевода Symfony: https://symfony.com/doc/current/translation.html)

public function buildForm(FormBuilderInterface $builder, array $options) {
   $builder
    ->add('nameDe')
    ->add('nameEn')
    ->add('descriptionDe')
    ->add('descriptionEn')
    ->add('rank', EntityType::class, [
        'class' => ProductType::class,
        'query_builder' => function (EntityRepository $er) {
        return $er->createQueryBuilder('p')
        ->orderBy('p.rank', 'ASC');
        },
        'choice_label' => 'nameDe',
        'placeholder' => 'foo.bar.placeholder',
    ])
    ->add('active')
    ->add('creatDate')
    ->add('updateDate', DateTimeType::class, array('data' => new \DateTime()));
}

Если файлы перевода не существуют, создайте их в папке translations/

# translations/messages.en.yaml
foo:
    bar:
        placeholder: At the beginning
# translations/messages.de.yaml
foo:
    bar:
        placeholder: Am Anfang
Ответ принят как подходящий

Если вы хотите добавить пользовательский текст в свои параметры, вы можете использовать опцию choice_label следующим образом:

public function buildForm(FormBuilderInterface $builder, array $options) {
   $builder
    ->add('nameDe')
    ->add('nameEn')
    ->add('descriptionDe')
    ->add('descriptionEn')
    ->add('rank', EntityType::class, [
        'class' => ProductType::class,
        'query_builder' => function (EntityRepository $er) {
            return $er->createQueryBuilder('p')
             ->orderBy('p.rank', 'ASC');
        },
        'choice_label' => function($productType) {
             return 'after ' . $productType->getNameDe();
        },
        'placeholder' => 'At the beginning',
    ])
    ->add('active')
    ->add('creatDate')
    ->add('updateDate', DateTimeType::class, array('data' => new \DateTime()));
}

С этим вы получите ожидаемый результат.

Вы можете добавить определенный геттер в свой класс сущности ProductType и использовать его непосредственно в choice_label, например:

ProductType.php

class ProductType {
    ...

    getNameDeWithCustomText() {
        return 'after ' . $this->getNameDe();
    }
}
'choice_label' => 'nameDeWithCustomText',

фантастически, я много пробовал сам, но это именно то, что я ищу, большое спасибо.

Michael 05.04.2019 00:24

Другие вопросы по теме