Php 在Zend 2相册示例中从DB填充可选字段
我开始用Zend编程,我使用他们提供的默认专辑示例作为“入门”指南 我想在表单中有一个选择下拉字段,但我找不到一种像代码现在这样简单的方法 这就是我在不咨询UsersForm.php数据库的情况下所做的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
$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;
}