草庐IT

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

coder 2024-04-27 原文

我正在学习 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/

有关php - zf2 表格 : populate select field with data coming from database的更多相关文章

  1. ruby-on-rails - Prawn - 表格单元格内的链接 - 2

    我正在尝试用Prawn生成PDF。在我的PDF模板中,我有带单元格的表格。在其中一个单元格中,我有一个电子邮件地址:cell_email=pdf.make_cell(:content=>booking.user_email,:border_width=>0)我想让电子邮件链接到“mailto”链接。我知道我可以这样链接:pdf.formatted_text([{:text=>booking.user_email,:link=>"mailto:#{booking.user_email}"}])但是将这两行组合起来(将格式化文本作为内容)不起作用:cell_email=pdf.make_c

  2. ruby - 如何使用 Ruby 将 CSV 文件读入 HTML 表格? - 2

    我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda

  3. ruby - 如何使用 Nokogiri 解析纯 HTML 表格? - 2

    我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315

  4. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  5. ruby - 如何以表格格式快速打印 Ruby 哈希值? - 2

    有没有办法快速将表格格式的ruby​​哈希打印到文件中?如:keyAkeyBkeyC...1232343451253474456...其中散列的值是不同大小的数组。还是使用双循环是唯一的方法?谢谢 最佳答案 试试我写的这个gem(在表中打印散列、ruby对象、ActiveRecord对象):http://github.com/arches/table_print 关于ruby-如何以表格格式快速打印Ruby哈希值?,我们在StackOverflow上找到一个类似的问题:

  6. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  7. ruby-on-rails - 为什么我不能在 Rails 的表格中创建一个数组作为列? - 2

    为什么我不能这样做:classCreateModels是否有其他方法可以使数组(“apples”)成为Fruit类实例的属性? 最佳答案 在Rails4中并使用PostgreSQL,您实际上可以在数据库中使用数组类型:迁移:classCreateSomething 关于ruby-on-rails-为什么我不能在Rails的表格中创建一个数组作为列?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/qu

  8. ruby-on-rails - Rails - 如何选择表格中的最后一个日期? - 2

    如何在列名为Lars的表中选择最后一个日期。我试过这个::dato,AND:name=>:name",:date=>Date.last,:name=>"Lars")%>我试过这个:输出:[#]我只需要一个日期时间格式,例如:2011-02-1523:53:28我该怎么做? 最佳答案 您必须按日期排序并选择一条记录:您也可以通过限制为单个记录来实现此目的:Reklamer.where(name:'Lars').order('datoDESC').limit(1)如果您只想要最后一个条目的最后日期,您可以这样做:Reklamer.whe

  9. ruby-on-rails - 在 Ruby on Rails 中访问 Google Drive 电子表格 - 2

    我正在尝试获取GoogleDrive电子表格的内容,但我似乎找不到可以轻松完成此操作的gem。我试过google-drive-ruby,但它涉及一个步骤,我必须从Google的网站获取授权token。这不是很有帮助,因为我必须在服务器端完成所有这些工作。显然在以前版本的gem中有一个登录方法,但被删除了。有什么办法吗?我必须使用OAuth吗?获取token并将该token传递到google-drive-ruby? 最佳答案 我设法在Reddit上得到了答案。您需要一个服务帐户并与您的服务应用程序的电子邮件共享文档。p12key也必须

  10. ruby 电子表格行背景色 - 2

    我正在尝试使用“电子表格”解析Excel电子表格。如何获取每一行的背景颜色? 最佳答案 book=Spreadsheet::Workbook.newsheet=book.create_worksheet:name=>'Name'format=Spreadsheet::Format.new:color=>:blue,:pattern_fg_color=>:yellow,:pattern=>1sheet.row(0).set_format(0,format)#forfirstcellinfirstrow或sheet.row(0).def

随机推荐