我在我的控制器处打电话:
控制器:
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()));
}
AnamneseType:
$builder->add('history', 'ckeditor', array(
'data' => $options['history'], 'toolbar' => $toolbar));
}
public function getDefaultOptions(array $options)
{
return array(
'history' => "Digite o Historico aqui"
);
}
我希望将这些历史信息注入我的表单,但它不能像我想象的那样工作,只需设置'数据'选项......
我该怎么做?
问题是在插入数据后,我无法将其恢复到表单中。
答案 0 :(得分:3)
使用setData()功能设置数据:
例如:
$form = $this->createForm(new AnamneseType())->setData($entity);
或者甚至可能:
$form = $this->createForm(new AnamneseType(), $entity);
答案 1 :(得分: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"
);
}
答案 2 :(得分: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));
我强烈建议您阅读官方文档。
表单数据应该从控制器传递。
替换
$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 official documentation
<强> UPD:强>
要从历史记录字段向模板传递某些值,请编辑其定义,如:
$builder->add('history', 'ckeditor', array(
'attr' => array(
'toolbar' => $toolbar,
),
));
您可以通过以下方式访问toolbar
选项:
{{ form.history.get('attr').toolbar }}
有更好的解决方案:Create Custom Form Type