embedFormしたフォームオブジェクトの動的schema設定
とあるフォームオブジェクトから別のフォームオブジェクトをマージするような形式で使える便利な::embedForm()メソッド。
そのまま使うんであれば特に問題ないのだけれども、動的にスキーマやバリデータを変更したい時とかが厄介なのでメモしとこ。
symfony 1.x legacy websiteでのProductPhotoFormのスキーマを呼び出す方法。
<?php // lib/form/doctrine/ProductForm.class.php /** * ProductPhotoのウィジェット取得 * @param Int $i newPhotoウィジェットが保持する配列キー * @param ProductPhotoのウィジェット配列名 */ public function getProductPhotoWidget($i, $name) { // newPhotoウィジェットが持つウィジェット取得 $widget = $this->getWidget('newPhoto')->getFields(); // $keyをキーとするwidgetがなければFALSEを返す if (!isset($widget[$i])) { return FALSE; } // キーが$keyのウィジェット取得 $widget = $widget[$i]->getFields(); // $nameをキーとするwidgetがなければFALSEを返す if (!isset($widget[$name])) { return FALSE; } return $widget[$name]->getFields(); }
ループの最初に生成されたcaptionウィジェット(構成はここを参照)を取得するには、
<?php $form = new ProductForm(); $widget = $form(0, 'caption');
とすれば取得できる。取得した$widgetから$widget->setOption()などのメソッドが使用できるようになる。
今回作成したメソッド内にある $this->getWidget('newPhoto') を $this->getValidator('newPhoto') に変えればバリデータが取得できる。