Дополнительное поле выбора для заказа - PullRequest
0 голосов
/ 02 апреля 2019

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

Я не знаю, как управлять этим в 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>

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Если вы хотите добавить пользовательский текст в ваши параметры, вы можете использовать параметр 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',
0 голосов
/ 02 апреля 2019

Если вы хотите добавить опцию по умолчанию в поле 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...