我经常需要在我的一些模板中渲染非常简单的imputs。
我想利用树枝宏和表单块来呈现某些HTML输入,而不涉及整个Symfony表单机制。
例如来自控制器:
$templateContext = array(
'my_input' = new FormField('my_input', 'choice', array(
'choices' => array('value1', 'value2', 'my_value'),
'value' => 'my_value',
));
);
在模板中:
<div>{{ form_widget(my_input) }}</div>
会呈现:
<div>
<select name="my_input">
<option>value1</option>
<option>value2</option>
<option selected="selected">my_value</option>
</select>
</div>
有一种简单的方法吗?
最后,我还希望能够在其他地方重用这些字段(比如我们可以重用表单类型)
答案 0 :(得分:1)
有很多方法可以解决这个问题。最简单的方法是将纯HTML写入您的树枝模板。
<form method="post">
<div>
<select name="my_input">
<option>value1</option>
<option>value2</option>
<option selected="selected">my_value</option>
</select>
</div>
</form>
然后在你的控制器中读回值。
$request = $this->getRequest();
if($request->getMethod() == 'POST'){
$data = $request->get('my_input')
//Do whatever you want with $data
}
如果您想重新使用html,可以在PHP中的某个地方构建它,并在需要时将其传递给Twig;或者您可以将它放在一个单独的树枝模板中,并使用树枝中的{include ''}
命令读取它。
答案 1 :(得分:0)
这是我最终的结果:
Class MyInput {
public static values = array(
'value1',
'value2',
'my_value',
);
}
class MyInputType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'choices' => MyInput::$value,
));
}
public function getParent() { return 'choice'; }
public function getName() { return 'my_input_type'; }
}
从控制器使用的字段类型(在将其注册为服务之后)
public function MyAction(Request $request)
{
$form = $this->createForm('my_input_type');
$form->handleRequest($request);
$templateContext['myForm'] = $form->createView();
// ...
}
渲染到模板中的输入
<div>{{ form(myForm) }}</div>
总结:我没有表格机制就无法呈现输入,但实际形式仍然相当简单。
答案 2 :(得分:0)
我找到了自己的解决方案,因为我需要从现有表单创建子表单。
{{form(form)}}
render()->getContent()
formView = formView.replace(/<(.*?)form(.*?)>/, '');
是的-我知道正则表达式并不完美,所以在有人说出来之前-我自己说,可以自己更改,因为它也可以捕获“ form-group”类等。
这只是我的解决方案的展示