Silex渲染表单 - ChoiceType

时间:2017-01-13 14:53:23

标签: php forms twig silex selected

(抱歉我的英文)

我正在开发一个Silex项目并开始使用该表单。

没有形式,我有这样的事情: Image of choicesType

使用表单我希望有相同的内容(用于选择

以我拥有的形式结束:

ImageAfterChoicesTypeForm

正如您所见,渲染效果不佳。

我想得到一些像:

<option value="1">Méthode</option>
 <option value="2">Marketing</option>
 <option value="3">Production</option>

在代码级别,我有一些非常简单的东西( 我从形式开始,放纵哈哈): 控制器:

public function add(Application $app, Request $request) {
        if (! $app['security.authorization_checker']->isGranted('ROLE_ADMIN')) {
            return new Response('Access Denied!', 403);
        }
        $repo = new DepartementRepository($app);
        $departements = $repo->getAllDepartements();

        $data = [];
        $erreurs = [];
        $form = $app['form.factory']->createBuilder(FormType::class, $data)
        ->add('nom',null,array('label' => 'Nom :'))
        ->add('prenom',null,array('label' => 'Prenom :'))
        ->add('departement_id',ChoiceType::class,array('choices' => $departements,'label' => 'Departement :'))
        ->add('ville',null,array('label' => 'Ville :'))
        ->add('salaire',null,array('label' => 'Salaire :'))
        ->add('date_embauche',null,array('label' => 'Date d\'embauche :'))
        ->getForm();


        $form->handleRequest($request);

        if ($form->isValid())
        {
            $data = $form->getData();
        }
        return $app['twig']->render('employe/new.html.twig', array('form' => $form->createView(),'erreurs'=> $erreurs));
    }

如果我转储我的$ departements变量,我有这个:

array:4 [▼
  0 => array:2 [▼
    "id" => "2"
    "nom_dep" => "Marketing"
  ]
  1 => array:2 [▼
    "id" => "3"
    "nom_dep" => "Méthode"
  ]
  2 => array:2 [▼
    "id" => "1"
    "nom_dep" => "Production"
  ]
  3 => array:2 [▼
    "id" => "4"
    "nom_dep" => "Recherche et developpement"
  ]
]

我的观点:

<form action="#" method="post">
     {{ form_widget(form) }}
     <input type="submit" name="submit" />
</form>

在我这样做之前:

{% for departement in departements %}
           <option value="{{ departement.id }}"
           {% if donnees.departement_id is defined and departement.id == donnees.departement_id %}selected{% endif %}>
                   {{ departement.nom_dep }}
           </option>
{% endfor %}

但我不知道如何用表格做这件事。

欢迎任何帮助。 谢谢!!

1 个答案:

答案 0 :(得分:0)

ChoiceType将数组作为参数:

数组样式(就像您当前的回购)

 $departements = $repo->getAllDepartements();
 $departementChoices = [];
 foreach( $departements as $departement) {
   $departementChoices[$departement["id"]] = $departement["nom_dep"]
 }

对象样式

 $departements = $repo->getAllDepartements();
 $departementChoices = [];
 foreach( $departements as $departement) {
   $departementChoices[$departement->getId()] = $departement->getLabel()
 }