2013-08-07 3 views
1

У меня проблема с выпадающим списком с Zend Framework 2 & Доктрина. я бы поставил "выбранный" атрибут в моем списке, но все варианты пройти выбранныйZF2 - установить выбранное значение на элементе выбора

Мой код:

Контроллер:

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, но не Статута

ответ

0

Это, вероятно, не работает из-за фигурные скобки. Согласно PHP документации

Используя одиночные фигурные скобки ({}) не будет работать для доступа к возвращаемые значения функций или методов или значений констант класса или статические переменные класса.

Это также не нужно использовать при использовании setValue. ZF2 преобразует его в строку при форматировании в представлении.

При создании массивов для передачи setValueOptions() вы должны сделать это ассоциативный массив массивов со следующими значениями:

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

Какие-либо из полей выбран параметр установлен верно будет выбор по умолчанию в элементе формы.

+0

Thx! Я проверю его как можно скорее. – RudySkate

1

Лично я не знаю, если getArrayOfAll() такая функция существует, я предполагаю, что вы правильно передаете массив в форме,

Я думаю, что вы должны делать что-то вроде этого, чтобы установить значение.

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

Но Поскольку вы заселяете DROP вниз, я предполагаю, что этот подход не сработает лучше всего с Drop Down. Вам нужно сделать что-то вроде этого

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

getArrayOfAll() - метод репозитория. Это обычная находка() в моем Localite RepositoryClass. Я буду использовать метод @Adrian – RudySkate

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() хотел только вариант выбраны. Зачем ?!

+0

Извините, не совсем понял вопрос. Он работает только при переходе через 18? или он выбирает неправильные вещи, когда вы проходите в 18? Я предлагаю вам, возможно, сбросить $ localite, прежде чем передать его элементу Select и посмотреть его структуру. Если проблема заключается в том, что она работает только правильно, когда вы проходите в 18, то что-то не так с запросом, который получает $ plan. – Adrian

Смежные вопросы