2016-03-13 2 views
0

В ZF2, предположит, что у меня есть Select в виде:ZF2 значения Достаньте из базы данных в виде класс

$this->add([ 
     'type' => 'Zend\Form\Element\Select', 
     'name' => 'someName', 
     'attributes' => [ 
      'id' => 'some-id', 
     ], 
     'options' => [ 
      'label' => 'Some Label', 
      'value_options' => [ 
       '1' => 'type 1', 
       '2' => 'type 2', 
       '3' => 'type 3', 
      ], 
     ], 
    ]); 

Как можно поместить значения «типа 1», «типа 2», «типа 3» и т. д. из запроса базы данных в value_options?

ответ

2

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

namespace MyModule\Form\Element; 

class TypeSelectFactory 
{ 
    public function __invoke(FormElementManager $formElementManager) 
    { 
     $select = new \Zend\Form\Element\Select('type'); 
     $select->setAttributes(] 
      'id' => 'some-id', 
     ]); 
     $select->setOptions([ 
      'label' => 'Some Label', 
     ]); 

     $serviceManager = formElementManager->getServiceLocator(); 
     $typeService = $serviceManager->get('Some\\Service\\That\\Executes\\Queries'); 

     // getTypesAsArray returns the expected value options array 
     $valueOptions = $typeService->getTypesAsArray(); 

     $select->setValueOptions($valueOptions); 

     return $select; 
    } 
} 

И необходимая конфигурация для module.config.php.

'form_elements' => [ 
    'factories' => [ 
     'MyModule\\Form\\Element\\TypeSelect' 
      => 'MyModule\\Form\\Element\\TypeSelectFactory', 
    ] 
], 

Вы можете затем использовать MyModule\\Form\\Element\\TypeSelect в качестве значения type при добавлении элемента к форме.

Также не забудьте прочитать documentation regarding custom form elements; это описывает, как правильно использовать диспетчер элементов формы, что важно для работы выше.

+0

мужчина, вы рок! прочитайте coupla другие ваши ответы на SO. Ты замечательный! –

+0

только одно примечание: в форме мне нужно добавить этот элемент в 'public function init()', как говорит ссылка на dend docs. –

+0

Вы могли бы просто посоветовать, как передать дополнительный параметр ('$ id') в' TypeSelectFactory' '$ typeService = $ serviceManager-> get ('Some \\ Service \\ That \\ Выполняет \\ Запросы') ; '? –

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