0

我的控制器有一个电话:

控制器:

    if($appointment->getAnamnese() == NULL){
        $entity = new Anamnese($appointment);
        $form = $this->createForm(new AnamneseType(),null,array('history' => 'Digite o Historico aqui'));
    }else{ 
        $entity = $appointment->getAnamnese();
        $form = $this->createForm(new AnamneseType(), null, array('history' => $entity->getHistory()));
    }

记忆类型:

    $builder->add('history', 'ckeditor', array(
        'data' => $options['history'], 'toolbar' => $toolbar));
}


public function getDefaultOptions(array $options)
{
    return array(
            'history' => "Digite o Historico aqui"
    );
}

我想将该历史信息注入我的表单,但它没有像我想象的那样工作,只是设置“数据”选项......

我该怎么做?

问题是插入数据后,我无法将其放回表单..

4

3 回答 3

3

使用setData()函数设置数据:

例如:

$form = $this->createForm(new AnamneseType())->setData($entity);

甚至可能:

$form = $this->createForm(new AnamneseType(), $entity);
于 2012-10-26T01:46:11.590 回答
1

你以错误的方式看待它。

您必须在此处使用选项。

创建表单:

$form = $this->createForm(new AnamneseType(), null, array('history' => $entity->getHistory()));

您的表格应如下所示:

public function buildForm(FormBuilder $builder, array $options){

    $toolbar = array(
        array(
            'name' => 'document',
            'items' => array('Source','-','DocProps','Preview','Print','-','Templates')
        ),
        array(
            'name' => 'clipboard',
            'items' => array('Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo')
        ),
        array(
            'name' => 'editing',
            'items' => array('Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt')
        ),

        array(
            'name' => 'basicstyles',
            'items' => array('Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat')
        ),
        '/',                
        array(
            'name' => 'paragraph',
            'items' => array('NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl')
        ),
        array(
            'name' => 'links',
            'items' => array('Link','Unlink','Anchor')
        ),
        array(
            'name' => 'insert',
            'items' => array('Image','Table','HorizontalRule','Smiley','SpecialChar','PageBreak')
        ),
        '/',
        array(
            'name' => 'styles',
            'items' => array('Styles','Format','Font','FontSize')
        ),
        array(
            'name' => 'colors',
            'items' => array('TextColor','BGColor')
        ),
        array(
            'name' => 'tools',
            'items' => array('Maximize', 'ShowBlocks','-','About')
        )
    );

    $builder->add('history', 'ckeditor', array( 'data' => $options['history'] , 'toolbar' => $toolbar));
}

...

public function getDefaultOptions(array $options)
{
    return array(
        'history' => "Digite o Historico aqui"
    );
}
于 2012-10-25T18:48:10.623 回答
1

好吧,看起来表单是在第二个条件下生成的并$entity->getHistory()返回 null。

编辑您的控制器代码如下

$historyValue = 'Digite o Historico aqui'; // Default history value
if($appointment->getAnamnese()){ 
    $entity = $appointment->getAnamnese();
    // Checks whether the history is not empty (null or equals '' in this case)
    if (!empty($entity->getHistory())) { 
        $historyValue = $entity->getHistory();
    }

}

$form = $this->createForm(new AnamneseType(),null,array('history' => $historyValue));

我强烈建议您阅读官方文档。

Symfony 表单


表单数据应该从控制器传递。

代替

$form = $this->createForm(new AnamneseType($entity->getHistory()));

$form = $this->createForm(new AnamneseType(), array(
    'history' => null === $entity->getHistory()
               ? 'Digite o Historico aqui'
               : $entity->getHistory,
));

从表单类中删除构造函数并替换

if($this->history != NULL){
    $builder->add('history', 'ckeditor', array( 'data' => $this->history , 'toolbar' =>       $toolbar));
}else{
    $builder->add('history', 'ckeditor', array( 'data' => "Digite o Historico aqui" , 'toolbar' => $toolbar));
}

$builder->add('history', 'ckeditor', array('toolbar' => $toolbar));

如果您要将数据映射回实体,请查看Forms 官方文档

升级版:

要将一些值从历史字段传递给模板,请编辑其定义,如下所示:

$builder->add('history', 'ckeditor', array(
    'attr' => array(
        'toolbar' => $toolbar,
    ),
));

您可以通过以下方式访问该toolbar选项:

{{ form.history.get('attr').toolbar }}

有更好的解决方案:创建自定义表单类型

于 2012-10-25T18:50:58.007 回答