gpt4 book ai didi

php - zf2 表格 : populate select field with data coming from database

转载 作者:可可西里 更新时间:2023-11-01 00:22:33 25 4
gpt4 key购买 nike

我正在学习 zf2,我面临一个涉及 2 个(最终更多)模块一起工作的问题。注意,我仔细阅读了this post (和相关的)这对我帮助很大。我将稍微解释一下这个问题:

  • 使用第一个模块 (FrOption),管理员可以管理网站表单选项。所有选项都存储在这样的数据库表中:

id|field_name|field_value
1|国家|德国|
2|国家|法国|
3|性别|男|
4|性别|女|
5|tipo|汽车|
6|tipo|飞|
...

  • 在我的模块 (FrItem) 中,我构建了一个需要一些“field_name”字段的表单。我的“项目”表如下:

id|name|id_tipo|
1|菲亚特|5|
2|汉莎航空|6|
3|福特|5|
4|法航6|
...

(id_tipo 是一个选项 FK)

还要考虑:

  • 我的实体有“tipo”属性,setter + getter
  • 我构建了一个 ItemHydrator 来将 id_tipo 数据库字段“映射”到“tipo”实体属性
  • 作为测试,我已将此字段添加到我的表单类中,并且在查看和编辑模式下一切正常:

    $this->add(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'id_tipo',
    'options' => array (
    'label' => 'Tipo',
    'empty_option' => 'Select',
    'value_options' => array ('5' => 'Car', '6' => 'Fly' ) )

    );

现在我想“链接”这两个模块:value_options 应该是来自 FrOption 的动态数组,所以我正在寻找实现此要求的最佳方法。

我认为一个解决方案可能是这样的:

  1. 将 getOptionByName($fieldName) 方法添加到我的 FrOption/src/FrOption/Service/FrOption.php 服务类
  2. 在 FrItem/Module.php 中获取服务,然后使用 getOptionByName 获取数据,最后将所有内容注入(inject)到表单中。

这会是一个明智且可行的解决方案吗?在性能方面,您对它有何看法(选项表可能会增长)?如果有,您曾经使用过什么样的解决方案来解决类似的问题?

谢谢

最佳答案

This can be done easily by following the below 2 steps in Zend Framework2 Step 1.

add The instance of the adapter what instantiating form class in the controller action

$dbAdapter = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
$form = new TestForm ($dbAdapter);

Step 2 in your form

namespace Test\Form;

use Zend\Form\Form;
use Zend\Db\Adapter\AdapterInterface;
use Zend\Db\Adapter\Adapter;
class TestForm extends Form
{
protected $adapter;
public function __construct(AdapterInterface $dbAdapter)
{
$this->adapter =$dbAdapter;
parent::__construct("Test Form");
$this->setAttribute('method', 'post');
//your select field
$this->add(array(
'type' => 'Zend\Form\Element\Select',
'name' => 'name',
'tabindex' =>2,
'options' => array(
'label' => 'Author',
'empty_option' => 'Please select an author',
'value_options' => $this->getOptionsForSelect(),
)
));

// another fields

}
public function getOptionsForSelect()
{
$dbAdapter = $this->adapter;
$sql = 'SELECT id,name FROM newsauthor where active=1 ORDER BY sortorder ASC';
$statement = $dbAdapter->query($sql);
$result = $statement->execute();

$selectData = array();

foreach ($result as $res) {
$selectData[$res['id']] = $res['name'];
}
return $selectData;
}

}

And here you go you are ready to rock.I hope it helps you

关于php - zf2 表格 : populate select field with data coming from database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15551188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com