我知道这听起来更基本,我仍然想发布我的问题,因为它与Zend Framework 2有关。我从Zend示例模块知道这个表单

namespace Album\Form;

use Zend\Form\Form;

class AlbumForm extends Form
{
    public function __construct($name = null)
    {
        // we want to ignore the name passed
        parent::__construct('album');
        $this->setAttribute('method', 'post');
        $this->add(array(
            'name' => 'id',
            'attributes' => array(
                'type'  => 'hidden',
            ),
        ));
        $this->add(array(
            'name' => 'artist',
            'attributes' => array(
                'type'  => 'text',
            ),
            'options' => array(
                'label' => 'Artist',
            ),
        ));
        $this->add(array(
            'name' => 'title',
            'attributes' => array(
                'type'  => 'text',
            ),
            'options' => array(
                'label' => 'Title',
            ),
        ));
        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type'  => 'submit',
                'value' => 'Go',
                'id' => 'submitbutton',
            ),
        ));
    }
}

这就是以这种方式召唤的

<?php
$form = $this->form;
$form->setAttribute('action', $this->url('album', array('action' => 'add')));
$form->prepare();

echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
echo $this->formRow($form->get('title'));
echo $this->formRow($form->get('artist'));
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();

如何为艺术家字段添加下拉列表,其中列表存储在关联数组中。 自从我进入Zend Framework 2以来,我想要专家的建议。 我已经关注了上一篇文章,但对我来说有点不清楚。

#1楼 票数:11 已采纳

这是为静态选项执行此操作的一种方法。

....

$this->add(array(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'number'
    'options' array(
        'options' => array( '1' => 'one', '2', 'two' )
    )
));

被警告....

因为您在构造函数中创建表单,所以您将无法访问ServiceManger。 如果要从数据库填充,这可能会导致问题。

让我们试试......

class AlbumForm extends Form implements ServiceManagerAwareInterface
{

public function __construct()
{
    ....

    $this->add(array(
        'type' => 'Zend\Form\Element\Select',
        'name' => 'number'
    ));

    ....
}

....

public function initFormOptions()
{
    $this->get('number')->setAttribute('options', $this->getNumberOptions());
}

protected function getNumberOptions()
{
    // or however you want to load the data in
    $mapper = $this->getServiceManager()->get('NumberMapper');
    return $mapper->getList();
}

public function getServiceManager()
{
    if ( is_null($this->serviceManager) ) {
        throw new Exception('The ServiceManager has not been set.');
    }

    return $this->serviceManager;
}

public function setServiceManager(ServiceManager $serviceManager)
{
    $this->serviceManager = $serviceManager;
}

但那不是很好,重新考虑......

扩展表单以便您可以创建表单是不对的。 我们没有创建新类型的表单,我们只是设置一个表单。 这需要一个工厂。 此外,在这里使用工厂的优点是我们可以以我们可以使用服务管理器来提供它的方式进行设置,这样服务管理器可以注入自己,而不是我们从控制器手动执行。 另一个优点是,只要我们有服务管理器,我们就可以调用此表单。

值得一提的另一点是,在有意义的地方,我认为最好从控制器中取出代码。 控制器不是脚本转储,所以让对象看起来很好。 我想说的是,用一个对象注入它需要的对象是好的,但是从控制器那里传递数据是不可能的,因为它创造了太多的依赖。 不要用勺子从控制器中取出物品,注入勺子。

无论如何,太多的代码咆哮......

class MySpankingFormService implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceManager )
    {
        $mySpankingNewForm = new Form;

        // build that form baby,
        // you have a service manager,
        // inject it if you need to,
        // otherwise just use it.

        return $mySpankingNewForm;
    }
}

调节器

<?php

class FooController
{
    ...
    protected function getForm()
    {
        if ( is_null($this->form) ) {
            $this->form =
                $this->getServiceManager()->get('MySpankingFormService');
        }
        return $this->form;
    }
    ...
}

module.config.php

...
'service_manager' => array (
        'factories' => array (
            ...
            'MySpankingFormService'
                => 'MyNameSpacing\Foo\MySpankingFormService',
            ...

  ask by 125369 translate from so

未解决问题?本站智能推荐:

3回复

动态将数据库表值添加到下拉列表

我创建了自定义插入以从数据库中获取值列表。 现在我要使用此数组创建一个下拉列表 这是我的选择列表
1回复

创建下拉列表zendframework2[重复]

可能重复: 在Zend Framework 2中创建一个下拉列表 我开始使用zf2。 我想知道如何在表单中创建一个下拉列表,以从数据库中获取选项? 这可能是一个新手问题,但我很难做到。 谢谢
2回复

嵌套数组在codeigniter中创建一个下拉列表

我有这样的菜单存储在数据库中 我使用函数将其转换为嵌套数组(multidim) 它返回一个结构化数组,如: 3.但是在这里我卡住了,因为我需要从codeigniter html helper转换要在form_dropdown中使用的嵌套数组,它需要类似的数组但结构不同: 这会
1回复

在php网页上创建一个下拉列表

我想为我的网页上的在线申请表创建静态和动态下拉菜单 静态下拉列表将列出一个清除级别列表,而动态下拉列表将基于一个职位空缺列表(该空缺级别又取自每个职位空缺具有1个pdf文件的文件夹) 最终目标是将一封包含申请人信息的电子邮件发送给我们的人力资源总监。 以及电子邮件正文中的字段。 我
2回复

从phpmyadmin创建一个填充的下拉列表

我需要创建一个填充的下拉列表,该列表链接到我的表,在phpmyadmin中称为'dog'。 我需要用户能够从列表中选择一只狗并按搜索并显示结果。 并且所有信息都存储在我的phpmyadmin表中。 这就是我到目前为止所做的:它只是一个空的下拉工作,它什么也没做。 请帮忙。 我将非常感
2回复

在PHP中填充一个下拉列表

我有一个可以租用的mysql游戏数据库。 我在php中创建了一个查询,以便用户能够输入标题或游戏说明,并且结果将在表格中显示为简单列表。 但是,我想在下拉列表中显示数组的结果。 但是如何? 我试图应用我在网上找到的代码片段(包括Stack Overflow),但不幸地使它们无法正常工作。
1回复

Zend-Framework中的常见SQL查询

我如何使用模型和控制器使用Zend-Framework上已有的sql查询代码? 我尝试了很多方法,但我无法解决。 这是一个要测试的“常见SQL查询代码”的示例: “ SELECT id_arquivos_retorno FROM sa_arquivos_retorno LIMIT 100
1回复

如何通过使用上一个下拉列表中选择的选项执行查询来创建下拉列表

我有一个带有网络下拉列表的表格 我还有一个名为plan的下拉列表,根据选择的网络选项从数据库中获取选项, $ nid应该是所选网络选项的值。 这个怎么做。 我以为可能我们可以在网络上使用onchange函数,但不知道如何使用。 PHP: 选择网络后不显示任何选项嗨! 得到它