Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Zend 2相册示例中从DB填充可选字段_Php_Sql_Zend Framework2 - Fatal编程技术网

Php 在Zend 2相册示例中从DB填充可选字段

Php 在Zend 2相册示例中从DB填充可选字段,php,sql,zend-framework2,Php,Sql,Zend Framework2,我开始用Zend编程,我使用他们提供的默认专辑示例作为“入门”指南 我想在表单中有一个选择下拉字段,但我找不到一种像代码现在这样简单的方法 这就是我在不咨询UsersForm.php数据库的情况下所做的 $this->add(array( 'type' => 'Zend\Form\Element\Select', 'name' => 'level', 'options' => array( 'label' => 'User l

我开始用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的教程之后,我设法创建了一个可选的,但是正在从“project”表中获取数据,因为我的其他字段需要该表,但是我需要从“user”表中获取该可选数据

My 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中的my 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);
    }

谢谢

是否准备一个带有DB选项的select元素?山姆在他的博客文章中描述得很好。在取得一些进展后,我更新了这个问题。谢谢你说他们需要项目表是什么意思?你能不能只查询一下这些状态,或者它们是与项目相关的?您可以发布您的sql结构吗?它是一个项目列表,当添加新项目或编辑现有项目时,您会得到通常的“名称”、“摘要”,其中一个是可选的,您可以选择一个用户作为项目经理。所以我需要让其余的人在“project”表中查询以获得项目信息,而可选的人需要在“user”表中查询以获得用户列表
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;
}