ZF2 - 在选择元素上设置选定值

时间:2013-08-07 13:36:38

标签: doctrine-orm zend-framework2

我在Zend Framework 2&amp ;;下拉列表中遇到了问题。教义。 我会将“selected”属性放在我的下拉列表中,但所有选项都会传递给选定的

我的代码:

控制器:

public function editAction()
{
    // get error message during addAction
    $this->layout()->setVariable("messageError", $this->flashMessenger()->getErrorMessages());

    $auth = $this->getAuthService();
    if ($auth->hasIdentity()){
        $builder = new AnnotationBuilder();
        // Get id of StaticContent
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            $this->flashMessenger()->addErrorMessage("Aucun plan choisi !");
             return $this->redirect()->toRoute('admin/plans');
        }
        $plan = $this->getEntityManager()->getRepository("Admin\Entity\Plan")->find((int)$id);
        $form = $builder->createForm($plan);
        // Find options for Localite list (<select>)
        $localites = $this->getEntityManager()->getRepository("Admin\Entity\Localite")->getArrayOfAll();
        $form->get('localiteid')->setValueOptions($localites);
        $form->get('localiteid')->setValue("{$plan->getLocaliteid()->getId()}");

        // Find options for TypePlan list (<select>)
        $typesPlan = $this->getEntityManager()->getRepository("Admin\Entity\TypePlan")->getArrayOfAll();
        $form->get('typeid')->setValueOptions($typesPlan);
        $form->get('typeid')->setValue("{$plan->getTypeid()->getId()}");
        // Options for Statut list (<select>)
        $form->get('statut')->setValueOptions(array('projet'=>'Projet', 'valide'=>'Validé'));
        $form->get('statut')->setValue($plan->getStatut());
        $form->setBindOnValidate(false);
        $form->bind($plan);
        $form->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type'  => 'submit',
                'value' => 'Modifier',
                'id' => 'submitbutton',
                'class' => "btn btn-primary"
            ),  
        ));
        $request = $this->getRequest();
        if ($request->isPost()) {
            [...]

            }
}

$localites = $this->getEntityManager()->getRepository("Admin\Entity\Localite")->getArrayOfAll();
    $form->get('localiteid')->setValueOptions($localites);

我正确地填充我的下拉列表,通常是

$form->get('localiteid')->setValue("{$plan->getLocaliteid()->getId()}");

只需在以下定义的选项上设置“已选择”:

$plan->getLocaliteid()->getId()

那么为什么在我的下拉列表中选择所有选项?!

信息:typeId相同但没有Statut

3 个答案:

答案 0 :(得分:1)

由于花括号,它可能无法正常工作。根据{{​​3}}文档

  

使用单个花括号({})不能用于访问函数或方法的返回值或类常量或静态类变量的值。

使用setValue时也不需要这样做。在视图中格式化时,ZF2会将其转换为字符串。

当您创建要传递给setValueOptions()的数组时,您应该使它成为具有以下值的数组的关联数组:

$form->get('select')->setValueOptions(array(
  'field' => array(
      'value' => 'value_of_the_option',
      'label' => 'what is displayed',
      'selected' => true,
  ),
));

哪个字段的selected选项设置为true将是表单元素中的默认选择。

答案 1 :(得分:1)

我个人不知道getArrayOfAll()是否存在这样的函数,我假设您正确地将数组传递给FORM,

我认为你应该做这样的事情来设定价值。

 $form->get('localiteid')->setValue($plan->getLocaliteid()->getId());

但是由于你正在填充DROP,我猜这种方法不适用于Drop Down。你需要做这样的事情

   $form->get('localiteid')->setAttributes(array('value'=>$plan->getLocaliteid()->getId(),'selected'=>true));

答案 2 :(得分:0)

我发现了一个错误?!

$plan = $this->getEntityManager()->getRepository("Admin\Entity\Plan")->find((int)$id);
$idLocalite = 18;//(int)$plan->getLocaliteid()->getId();
$idTypePlan = 2;//(int)$plan->getTypeid()->getId();

当我使用$plan->getLocaliteid()->getId();$plan->getTypeid()->getId()将参数传递到存储库方法getArrayOfAll($idLocalite)

LocaliteRepository.php:

class LocaliteRepository extends EntityRepository {

  public function getArrayOfAll($currentLocaliteId) {
    $result = $this->_em->createQuery("SELECT l.nom, l.localiteid FROM Admin\Entity\Localite l ORDER BY l.nom")->getArrayResult();
    $localite = array();
    foreach($result as $loc) {
        if ($currentLocaliteId == $loc['localiteid']) {
            $localite[$loc['localiteid']] = array(
                    'value' => $loc['localiteid'],
                    'label' => $loc['nom'],
                    'selected' => true,
            );
        } else {
            $localite[$loc['localiteid']] = array(
                    'value' => $loc['localiteid'],
                    'label' => $loc['nom'],
                    'selected' => false
            );
            //$localite[$loc['localiteid']] = $loc['nom'];
        }
    }

    return $localite;
  }

}

因此,如果我使用的是$idLocalite = 18而不是$idLocalite = (int)$plan->getLocaliteid()->getId(),则只会选择所需的选项。为什么?!