Я хочу установить порядок для новой записи. Мне нужен заказ на первую позицию и заказ после одной из существующих записей
Я не знаю, как это сделать в 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>




Если вы хотите добавить параметр по умолчанию в поле 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',
фантастически, я много пробовал сам, но это именно то, что я ищу, большое спасибо.