我在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
答案 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()
,则只会选择所需的选项。为什么?!