从数据库中获取价值并将其插入下拉列表Symfony 3中

时间:2017-05-12 17:53:34

标签: php symfony

您好我尝试将数据库中的数据插入下拉列表或ChoiceType。数据来自两个不同的数据库。

这是我的IndexController

public function indexAction(Request $request){
 $em = $this->getDoctrine()->getManager();
    //$city = new Cities();->select("c.id,c.active,c.code,t.text name")
 $query = $em->createQueryBuilder()
      ->select("c")
      ->from("DataBaseBundle:Countries","c")
      ->innerJoin("DataBaseBundle:Translationtext","t","WITH","c.translation=t.translation");
 $country = $query->getQuery()->getResult();
 if (!$country){
      throw $this->createNotFoundException("Country not found");
 }
 $form = $this->createForm(CountriesType::class,$country);

 if ($form->isValid()) {
    $user = $form->getData();
    $em->persist($user);
    $em->flush();
}
 return $this->render('ParametersBundle:Countries:index.html.twig', array(
            'form' => $form->createView(),));
     }
}

我的表格名为CountriesType

<?php

namespace ParametersBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;

class CountriesType extends AbstractType
{
    private $fooChoices = [
        0 => 'choice naught',
        1 => 'choice one',
        2 => 'choice deuce',
    ];
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options){
        $builder->add('active',CheckboxType::class)
        ->add('countries',TextType::class)
        ->add('countries',ChoiceType::class,['choices' => $this->fooChoices,])
        ->add('save', SubmitType::class, array('label' => 'Create Post'));
    }
    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'choices' => array(
                'm' => 'Male',
                'f' => 'Female',
            )
            //'data_class' => 'DataBaseBundle\Entity\Cities'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'country';
    }


}

FooChoices从代码中提取数据,而不是从数据库中提取数据。

编辑:我的实体(转移位于另一个名为Traslations的数据库中)

    <?php

namespace DataBaseBundle\Entity;

/**
 * Countries
 */
class Countries
{
    /**
     * @var integer
     */
private $id;

/**
 * @var integer
 */
private $active = '1';

/**
 * @var string
 */
private $code2;

/**
 * @var string
 */
private $code3;

/**
 * @var \DataBaseBundle\Entity\Continents
 */
private $continents;

/**
 * @var \DataBaseBundle\Entity\Translation
 */
private $translation;


/**
 * Get id
 *
 * @return integer
 */
public function getId()
{
    return $this->id;
}

/**
 * Set active
 *
 * @param integer $active
 *
 * @return Countries
 */
public function setActive($active)
{
    $this->active = $active;

    return $this;
}

/**
 * Get active
 *
 * @return integer
 */
public function getActive()
{
    return $this->active;
}

/**
 * Set code2
 *
 * @param string $code2
 *
 * @return Countries
 */
public function setCode2($code2)
{
    $this->code2 = $code2;

    return $this;
}

/**
 * Get code2
 *
 * @return string
 */
public function getCode2()
{
    return $this->code2;
}

/**
 * Set code3
 *
 * @param string $code3
 *
 * @return Countries
 */
public function setCode3($code3)
{
    $this->code3 = $code3;

    return $this;
}

/**
 * Get code3
 *
 * @return string
 */
public function getCode3()
{
    return $this->code3;
}

/**
 * Set continents
 *
 * @param \DataBaseBundle\Entity\Continents $continents
 *
 * @return Countries
 */
public function setContinents(\DataBaseBundle\Entity\Continents $continents = null)
{
    $this->continents = $continents;

    return $this;
}

/**
 * Get continents
 *
 * @return \DataBaseBundle\Entity\Continents
 */
public function getContinents()
{
    return $this->continents;
}

/**
 * Set translation
 *
 * @param \DataBaseBundle\Entity\Translation $translation
 *
 * @return Countries
 */
public function setTranslation(\DataBaseBundle\Entity\Translation $translation = null)
{
    $this->translation = $translation;

    return $this;
}

/**
 * Get translation
 *
 * @return \DataBaseBundle\Entity\Translation
 */
public function getTranslation()
{


       return $this->translation;
    }
}

2 个答案:

答案 0 :(得分:2)

Firstable,您需要根据返回的查询构建数组,其中包含国家/地区名称:

//IndexController
$country = $query->getQuery()->getResult();
    $data= array();
     foreach ( $country as $c) {
        array_push($data,$c->getTranslation());

    }
    $form = $this->createForm(CountriesType::class,$data);

然后您需要将 options 数组参数传递到 add 语句。
只需替换此行:

     //CountriesType
   ->add('countries',ChoiceType::class,['choices' => $this->fooChoices,])

这一个:

 ->add('countries',ChoiceType::class,array('choices' => $options))

答案 1 :(得分:0)

$form = $this->createForm(CountriesType::class,array('choices' => $country));

最后,将表单构建到 Controller

{{1}}
相关问题