Соната / AdminBundle: выбранный вариант

Я новичок в Symfony и Sonata / AdminBundle. Я хотел бы знать, как отметить selected опция, когда у объекта есть поле от другого объекта. Например: у меня есть две сущности: Магазин а также город. Магазин сущность имеет поле под названием id_city,

Моя проблема в том, когда я рендеринг формы редактирования Shop, потому что всегда первый id_city в опции выбран.

Это кусок кода, где я рендеринг формы конфигурации в AdminStores учебный класс:

protected function configureFormFields(FormMapper $formMapper)
{

$formMapper
->tab('Tiendas')
->with('Content', array('class' => 'col-md-9'))
->add('nombreTienda', 'text')
->add('cifTienda', 'text')
->add('direccionTienda', 'text')
->add('personaContacto', 'text', array('required' => false,'empty_data' => ''))
->add('cp', 'text', array('label' => 'Código Postal', 'required' => false, 'empty_data' => '00000'))
->add('urlTienda', 'text', array('required' => false, 'empty_data' => ''))
->add('emailTienda', 'text')
->add('telefonoTienda', 'text')
->add('login', 'text')
->add('pass', 'password', array('required' => false))
->add('idMunicipio', 'entity', array(
'class' => 'AppBundle:Municipios',
'choice_label' => 'municipio',
'query_builder' => function (EntityRepository $er) {
$lista = $er->createQueryBuilder('ss')
->orderBy('ss.municipio', 'ASC');
},
'data' => $this->subject->getIdMunicipio()
)) // end array idMunicipio y add()
->add('idProvincia', EntityType::class, array(
'class' => 'AppBundle:Provincias',
'label' => 'Provincia',
'choice_label' => 'provincia',
'choice_value' => 'getId',
'by_reference' => true,
))
->add('descripcionTienda', 'textarea')
->end()
->end()
->tab('Multimedia')
->with('Content', array('class' => 'col-md-3'))
->add('fotoTienda', 'file', array(
'label' => 'Imagenes (puedes subir hasta 6 imágenes)',
'attr' =>array('class' => 'form-control', 'multiple' => 'multiple', 'accept' => 'image/*'),
'data_class' => null,
'required' => false,
'empty_data' => 'noDisponible',
));
}

В этом фрагменте кода я восстанавливаю все города в AdminStores учебный класс:

->add('idMunicipio', 'entity', array(
'class' => 'AppBundle:Municipios',
'choice_label' => 'municipio',
'query_builder' => function (EntityRepository $er) {
$lista = $er->createQueryBuilder('ss')
->orderBy('ss.municipio', 'ASC');
},
'data' => $this->subject->getIdMunicipio()
)) // end array idMunicipio y add()

Хотелось бы узнать, пожалуйста, логику «если this->id_city == entity->id_city тогда опция выбрана «.

заранее спасибо

Я редактирую этот комментарий, потому что я думаю, что я решил это.

В моем AdminController называется ShopsAdmin Я создал метод под названием getAllMunicipios которые возвращают массив со своими name а также id:

$allCities = array(
'Tokyo' => 1
'Madrid => 2
);

Это метод:

protected function getAllMunicipios()
{
$municipios = $this->getConfigurationPool()
->getContainer()
->get('doctrine')
->getRepository('AppBundle:Municipios')
->findBy([], ['municipio' => 'ASC']);

$todosmunicipios = array();
foreach ($municipios as $municipio) {
$todosmunicipios[(string)$municipio->getMunicipio()] = (int)$municipio->getId();
}
return $todosmunicipios;
}

Теперь мой AdminStores::configureFormFields метод, подобный этому:

->add('idMunicipio', 'choice', array(
'choices' => $this->getAllMunicipios(),
'required' => false,
'by_reference' => false,
'data' => $this->subject->getIdMunicipio()
))

Это хороший способ сделать это? Я думаю, что метод, который возвращает все, должен быть помещен в сущность, а не в контроллер, но я не знаю, как сделать это статическим

1

Решение

просто вызовите setCity (\ AppBundle \ Entity \ City $ city) в вашей сущности магазина. и укажите правильный городской объект в качестве первого и единственного параметра. Сделайте это до того, как вы предоставите форму

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector