我想在我的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' => '',
),
));
提前感谢您的重要回答。
答案 0 :(得分: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'
),
),
));
答案 1 :(得分: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',
);
}
在我的视图脚本中:
<div class="form_element">
<?php $element = $form->get('color'); ?>
<label>
<?php echo $element->getOption('label'); ?>
</label>
<?php echo $this->formSelect($element); ?>
</div>
答案 2 :(得分:0)
从抽象层面考虑它。
所以最终你的表格有Dependency
。由于我们已从official docs了解到,因此Dependency-Injection
又称DI
两种类型。 Setter-Injection和构造函数注入。就个人而言(!)我在这些情况下使用其中一种:
构造函数注入如果依赖项是功能工作的绝对要求
Setter-Injection 如果依赖项或多或少是可选的,以扩展已经工作的东西
对于Form,它是一个必需的依赖项(因为没有它,没有填充的Select-Element),因此我将给你一个构造函数注入的例子。
您的控制器的某些操作:
$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的工作方式!这是可能需要进行一些优化的部分。但总而言之,您将了解它是如何完成的。
答案 3 :(得分:0)
在您的控制器中,您可以执行以下操作;
在我的第一个例子中,假设你有一个组表。然后我们将fetch所有组表中的数据; 我们需要在选择选项中显示ID和名称;
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,
));
}
OR
在此示例中,组列表是硬编码的;
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
答案 4 :(得分: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);