Sonata / AdminBundle:选择的选项

时间:2017-11-01 22:39:40

标签: php symfony sonata-admin symfony3.x

我是Symfony和Sonata / AdminBundle的新手。我想知道当实体有来自其他实体的字段时如何标记selected一个选项。例如:我有两个实体:购物城市 Shop 实体有一个名为id_city的字段。

我的问题是当我渲染编辑表单时,因为总是选中该选项中的第一个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()

我想知道,“if this->id_city == entity->id_city then,选择选项”的逻辑。

提前致谢

我编辑此评论是因为我认为我解决了这个问题。

在名为AdminController的{​​{1}}中,我创建了一个名为ShopsAdmin的方法,该方法返回一个包含getAllMunicipiosname的数组:

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

这是一个很好的方法吗?我认为返回all的方法必须放在实体中而不是int控制器但是我不知道它是如何静态的

1 个答案:

答案 0 :(得分:0)

只需在您的Shop实体中调用setCity(\ AppBundle \ Entity \ City $ city)即可。并将正确的城市实体作为第一个也是唯一的参数。在渲染表单之前执行此操作