Forms 如何重构这个symfony代码?

Forms 如何重构这个symfony代码?,forms,symfony1,action,Forms,Symfony1,Action,在action.class.php中: $form = new NewsForm(); $form->setWidget('thumbnail', new sfWidgetFormSelect(array('choices' => $news['images']))); $form->getWidget('summarize')->setDefault($news['summarize']); $form->getWidget('title')->setDef

在action.class.php中:

$form = new NewsForm();
$form->setWidget('thumbnail', new sfWidgetFormSelect(array('choices' => $news['images'])));
$form->getWidget('summarize')->setDefault($news['summarize']);
$form->getWidget('title')->setDefault($news['title']);
其中$news是在前面的步骤中生成的


它看起来是多余的,如何重构它?

除非在多个操作中使用相同的代码,否则您的代码不会被重新编译。 要使其可重用,您可以使用中的options参数,并按如下方式更改表单:

class NewsForm extends ... {

    public function configure() {
        //Whatever you do here
        //....

        // if a news is set we configure certain fields
        if($news = $this->getOption('news', false)) {
            $this->setWidget('thumbnail', new sfWidgetFormSelect(array('choices' => $news['images'])));
            $this->setDefault('summarize', $news['summarize']);
            $this->setDefault('title', $news['title']);
        }
    }
}
您可以使用以下选项创建表单:

$form = new NewsForm(array(), array('news' => $news));
参考: