从抽象的层面考虑。
所以最终你的 Form 有一个Dependency
. 由于我们从官方文档中了解到,有两种类型的Dependency-Injection
aka DI
。Setter 注入和构造函数注入。就个人而言(!)我在这些情况下使用一种或另一种:
如果依赖项是功能正常工作的绝对要求,则使用构造函数注入
如果依赖项或多或少是可选的以扩展已经工作的东西,则使用Setter-Injection
对于您的表单,它是必需的依赖项(因为没有它,就没有填充的 Select-Element),因此我将为您提供构造函数注入的示例。
您的控制器的一些操作:
$sl = $this->getServiceLocator();
$dbA = $sl->get('Zend\Db\Adapter\Adapter');
$form = new SomeForm($dbA);
这就是表格的全部内容。人口现在发生在您的表单中。这只是一个例子,可能需要一些微调,但你会明白的:
class SomeForm extends \Zend\Form
{
public function __construct(\Zend\Db\Adapter\Adapter $dbA)
{
parent::__construct('my-form-name');
// Create all the form elements and stuff
// Get Population data
$popData = array();
$result = $dbA->query('SELECT id, title FROM Categories', $dbA::QUERY_MODE_EXECUTE)->toArray();
foreach ($result as $cat) {
$popData[$cat['id'] = $cat['title'];
}
$selectElement = $this->getElement('select-element-name');
$selectElement->setValueOptions($popData);
}
}
重要提示:我对上述代码一无所知Zend\Db
,仅用于我认为文档将如何工作!这可能是需要一些优化的部分。但总而言之,您将了解它是如何完成的。