2013-05-07 56 views
1

我想在使用_toString()方法的表单中呈现模板。 我面临的问题是,表单不从控制器继承,我不能做 $ str。= $ this-> renderPartial('template',array('form'=> $ this)); 这是如何实现的?symfony在一个表格中呈现模板/部分

我使用symfony的1.4与PHP 5.3

回答

1

你可以为它创建一个小部件:

class fdWidgetFromPartial extends sfWidgetForm 
{ 
    public function __construct($options = array(), $attributes = array()) 
    { 
    parent::__construct($options, $attributes); 

    sfProjectConfiguration::getActive()->loadHelpers('Partial'); 
    } 

    protected function configure($options = array(), $attributes = array()) 
    { 
    $this->addRequiredOption('template'); 
    $this->addOption('variables', array()); 
    } 

    public function render($name, $value = null, $attributes = array(), $errors = array()) 
    { 
    return get_partial($this->getOption('template'), array_merge(array(
     'name' => $name, 
     'value' => $value, 
     'attributes' => $attributes, 
     'errors' => $errors, 
    ), $this->getOption('variables'))); 
    } 
} 

而且使用这样的:

$this->setWidget('field', new WidgetFromPartial(array(
    'template' => 'modeule/template', 
    'variables' => array(
    'some_data' => $this->getObject()->getData(), 
) 
))); 

你应该使用在任何输入字段部分。

+0

你是什么意思在部分中不使用任何输入字段? – maazza 2013-05-08 07:10:44

+0

只是一个建议。不要将任何表单元素(输入,选择,...)放入部分,因为它将被发送回服务器并需要验证。如果你想使用输入字段,你应该为它创建一个单独的小部件和一个验证器。 – 1ed 2013-05-08 08:00:59

+0

我将表单添加到部分,我只渲染表单域,可以吗? – maazza 2013-05-08 09:24:39