简体   繁体   中英

Sonata/AdminBundle: Selected Option

I'm new in Symfony and Sonata/AdminBundle. I would like to know how to mark selected an option when the entity has a field from other entity. For example: I have two entities: Shop and City . The Shop entity has a field called id_city .

My problem is when I'm rendering the edit form Shop because always the first id_city in the option is selected.

This is the piece of code where I'm rendering the configuration form in AdminStores class:

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',
        ));
} 

In this piece of code, I'm recovering all cities in AdminStores class:

->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()

I would like to know, please, the logic for " if this->id_city == entity->id_city then, option is selected".

Thanks in advance

I edit this comment because I think that I solved it.

In my AdminController called ShopsAdmin I have created a method called getAllMunicipios which return an array with their name and id :

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

This is the method:

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;
}

Now my AdminStores::configureFormFields method like that this:

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

It is a good way to do it? I think that the method that return all, must be placed into the entity and not int the controller but I dont know how do it static

just call setCity(\\AppBundle\\Entity\\City $city) in your Shop entity. and give the right city entity as the first and only parameter. Do this before you render the form

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM