0

我开始使用 Zend 进行编程,并且使用他们提供的默认专辑示例作为“入门”指南。

我想在表单中有一个选择下拉字段,但我找不到像现在的代码那样简单的方法

这就是我在没有从我的 UsersForm.php 咨询数据库的情况下这样做的方式

$this->add(array(
    'type' => 'Zend\Form\Element\Select',
    'name' => 'level',
    'options' => array(
        'label' => 'User level',
        'value_options' => array(
                    '1' => 'admin',
                    '2' => 'boss',
                    '3' => 'assistent',
                    '4' => 'client',
        ),
    ),
));

更新

好的,所以按照使用 TableGateway 的教程,我设法获得了一个可选择的但正在从“项目”表中获取数据,因为我的其余字段需要该表,但我需要从“用户”表中获取该可选择项。

我的 Module.php 看起来像这样:

public function getServiceConfig()
{
    return array(
        'invokables' => array(),
        'factories' => array(
            'Project\Model\ProjectTable' =>  function($sm) {
                $projectTableGateway = $sm->get('ProjectTableGateway');
                $usersTableGateway = $sm->get('UsersTableGateway');
                $table = new ProjectTable($projectTableGateway, $usersTableGateway);
                return $table;
            },
            'project-model-selectable' =>  function($sm) {
                $tableGateway = $sm->get('selecttable-gateway');
                $table = new SelectTable($projectTableGateway, $usersTableGateway);
                return $table;
            },
            'ProjectTableGateway' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Project());
                return new TableGateway('project', $dbAdapter, null, $resultSetPrototype);
            },
            'UsersTableGateway' => function ($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new Users());
                return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
            },
            'selecttable-gateway' => function ($sm) {
                $dbAdapter          = $sm->get('Zend\Db\Adapter\Adapter');
                $resultSetPrototype = new ResultSet();
                $resultSetPrototype->setArrayObjectPrototype(new SelectOption());
                return new TableGateway('user', $dbAdapter, null, $resultSetPrototype);
            },
        ),
    );
}

还有我在 ProjectTable.php 中的 getProject 函数:

public function getProject($id)
    {
        $id  = (int) $id;

        $rowset = $this->projectTableGateway->select(array('id' => $id));
        $row = $rowset->current();
        if (!$row) {
            throw new \Exception("Could not find row $id");
        }
        return $row;
    }

我在 ProjectController.php 中的 addAction

public function addAction()
    {
        $tableGateway = $this->getServiceLocator()->get('Project\Model\ProjectTable');
        $form = new ProjectForm($tableGateway);
        $form->get('submit')->setValue('Nuevo');

        $request = $this->getRequest();
        if ($request->isPost()) {

            $project = new ProjectForm($tableGateway);
            $form->setInputFilter($project->getInputFilter());
            $form->setData($request->getPost());

            if ($form->isValid()) {
                $project->exchangeArray($form->getData());
                $this->getProjectTable()->saveProject($project);

                // Redirect to list of projects
                return $this->redirect()->toRoute('project');
            }
        }
        return array('form' => $form);
    }

谢谢

4

1 回答 1

0
public function getProject($id)
{
    $id  = (int) $id;

    $rowset = $this->projectTableGateway->select(array('id' => $id));
    $row = $rowset->current();
    if (!$row) {
        throw new \Exception("Could not find row $id");
    }
    return $row;
}
于 2013-11-13T09:39:13.383 回答