2013-03-13 3 views
0

Я хочу поставить выпадающий список в моем проекте, который сделан в zf2 ... Я потратил впустую весь день, но у меня появилось статическое выпадающее меню, а не динамическое. Может ли кто-нибудь помочь мне с этой проблемой?динамическое выпадающее меню в zf2?

UserForm.php

$this->add(array(
      'name' => 'group_name', 
      'type' => 'select', 
      'attributes' => array(
       'id'=>'group_name', 
       'class'=>'large', 
       'options' => array('1=>php','2'=>'java'), 
      ), 
      'options' => array(
       'label' => '', 
      ), 
     )); 

Заранее спасибо за ваш ответ. Valuabe

ответ

0

Попробуйте это:

$this->add(array(
    'name' => 'group_name', 
    'type' => 'select', 
    'attributes' => array(
     'id'=>'group_name', 
     'class'=>'large', 
    ), 
    'options' => array(
     'label' => '', 
     'value_options' => array(
      '1' => 'php', 
      '2' => 'java' 
     ), 
    ), 
)); 
+0

нет это только отображение статического выпадающий, но я хочу, динамический, которые получают значение из базы данных и отображения Это. –

+0

Что вы пробовали? Я не вижу никакого кода, связанного с БД, в вашем вопросе и без переменных '$ options'. –

+0

hey bram, если у вас есть предложения для получения динамического выпадающего списка с первого шага на последний шаг, поэтому мне помогите .. Я новичок в zf2 .. –

0

Это то, что я сделал:

В моем конструкторе для моей формы

$this->add(array(
     'type' => 'Zend\Form\Element\Select', 
     'name' => 'color', 
     'options' => array(
      'empty_option' => 'Select a Color', 
      'value_options' => self::getColors(), 
      'label' => 'Color', 
     ), 
    )); 

В классе формы все же, я создал этот метод:

public static function getColors() { 
    // access database here 
    //example return 
    return array(
     'blue' => 'Blue', 
     'red' => 'Red', 
    ); 
} 

На мой взгляд sc ript:

<div class="form_element"> 
     <?php $element = $form->get('color'); ?> 
     <label> 
      <?php echo $element->getOption('label'); ?> 
     </label> 
     <?php echo $this->formSelect($element); ?> 
    </div> 
0

Подумайте об этом с абстрактного уровня.

  • У вас есть одна форма
  • Форма нуждается в данных от внешнего

Так в конечном счете, ваша форма имеет Dependency. Поскольку мы узнали из official docs, существует два типа Dependency-Injection aka DI. Сеттер-инжекция и инсталляция конструктора. Лично я использовать один или другой в тех случаях (!):

Конструктор-Injection если зависимость является абсолютным требованием для функциональности работать

сеттер-Injection, если зависимости более или менее необязательно продлить уже рабочий материал

В случае вашей формы это требуемая зависимость (потому что без него нет заполненного элемента выбора), поэтому я дам вам пример для инсталляции конструктора.

Некоторые действия контроллера:

$sl = $this->getServiceLocator(); 
$dbA = $sl->get('Zend\Db\Adapter\Adapter'); 
$form = new SomeForm($dbA); 

Это все для формы. Население теперь происходит внутри вашей Формы. Это всего лишь пример, и может потребоваться тонкая настройка, но вы получите идею:

class SomeForm extends \Zend\Form 
{ 
    public function __construct(\Zend\Db\Adapter\Adapter $dbA) 
    { 
     parent::__construct('my-form-name'); 

     // Create all the form elements and stuff 

     // Get Population data 
     $popData = array(); 
     $result = $dbA->query('SELECT id, title FROM Categories', $dbA::QUERY_MODE_EXECUTE)->toArray(); 
     foreach ($result as $cat) { 
      $popData[$cat['id'] = $cat['title']; 
     } 

     $selectElement = $this->getElement('select-element-name'); 
     $selectElement->setValueOptions($popData); 
    } 
} 

Важная: Я понятия не имею, О Zend\Db приведенный выше код только для того, как я думаю, что это будет работать движение по the docs! Это та часть, которая, вероятно, потребует некоторой оптимизации. Но в целом вы получите представление о том, как это делается.

0

В вашем контроллере вы можете сделать что-то вроде ниже;

В моем первом примере предполагается, что у вас есть таблица групп. Затем мы собираемся получить данные в таблице групп; Нам нужны идентификаторы и имена для отображения в некоторых вариантах;

public function indexAction() 
{ 
    $groupTable = new GroupTable(); 
    $groupList = $groupTable->fetchAll(); 

    $groups = array(); 
    foreach ($groupList as $list) { 
     $groups[$list->getId()] = $list->getName(); 
    }  

    $form = new UserForm(); 
    $form->get('group_name')->setAttributes(array(
     'options' => $groups, 
    )); 
} 

ИЛИ

в этом примере является жестко списке групп;

public function indexAction() 
{ 
    $groupList = array('1' => 'PHP', '2' => 'JAVA', '3' => 'C#'); 

    $groups = array(); 
    foreach ($groupList as $id => $list) { 
     $groups[$id] = $list; 
    }  

    $form = new UserForm(); 
    $form->get('group_name')->setAttributes(array(
     'options' => $groups, 
    )); 
} 

Тогда в вашем представлении сценарий;

<?php 
    $form = $this->form; 
    echo $this->formRow($form->get('group_name')); 
?> 

Или вы можете прямо помощник контроллера, вы можете проверить эту ссылку http://www.resourcemode.com/me/?p=327

0

Просто наткнулся на такую ​​же проблему и пришлось взглянуть в ZF2 источник. не Вот более OOP решение:

Внутри конструктору формы:

 $this->add(array(
     'name' => 'customer', 
     'type' => 'Zend\Form\Element\Select', 
     'attributes' => array(
      'options' => array(
       0 => 'Kunde', 
      ) 
     ), 
     'options' => array(
       'label' => 'Kunde' 
    ))); 

внутри контроллера:

$view->form = new SearchForm(); 
    $customers = $view->form->get('customer')->getValueOptions(); 
    $customers[] = 'Kunde1'; 
    $customers[] = 'Kunde2'; 
    $customers[] = 'Kunde3'; 
    $customers[] = 'Kunde4'; 
    $view->form->get('customer')->setValueOptions($customers); 
Смежные вопросы