抽象的なレベルから考えてみてください。
- 1 つのフォームがあります
- フォームには外部からのデータが必要です
したがって、最終的にフォームにはDependency
. 公式ドキュメントから学んだので、Dependency-Injection
別名には2つのタイプがありDI
ます。セッター注入とコンストラクター注入。個人的に(!)私はこれらの場合にどちらかを使用します:
機能が機能するために依存関係が絶対的な要件である場合のコンストラクター注入
依存関係が多かれ少なかれオプションであり、すでに機能しているものを拡張する場合のセッターインジェクション
あなたのフォームの場合、それは必須の依存関係です(それがないと、Select-Element が入力されないため)、Constructor-Injection の例を示します。
コントローラーのいくつかのアクション:
$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
動作すると思われる方法についてのみです。これは、おそらく最適化が必要な部分です。しかし、全体として、それがどのように行われるかについてのアイデアが得られます。