美好的一天,我在sf2中有这样的形式,它与一个实体有关,我无法解决它的问题。如果我在控制器的方法中运行print_r($ _ POST),它会显示我提交的数据,但是如果我从内部运行isValid()i'我没有得到任何东西,我没有从中得到任何错误,这让我不知道我做错了什么以及如何解决它。
控制器:
/**
* @Route("/papetarie/cautare", name="papetarie_search_form")
* @Template("CatalogBundle:Default:search_form.html.twig")
*/
public function showSearchFormAction(Request $request) {
$form = $this->createFormBuilder()
->add('Keyword', 'text', array(
'label' => 'Cautare Produs',
'label_attr' => array('class' => 'sr-only'),
'attr' => array(
'placeholder' => 'Cautare Produs',
'pattern' => '.{2,}', //minlength
'class' => 'col-md-10'
),
'constraints' => array(
new NotBlank(array('message' => 'Campul nu poate sa fie gol')),
new Length(array('min' => 2))
),
))
->add('submit', 'submit', array('attr' => array('class' => 'save btn-primary')))
->getForm();
$form->handleRequest($request);
if($form->isValid()) {
$data = $form->get('Keyword')->getData();
print_r($data);
}
return array(
'search_form' => $form->createView()
);
}
search_form.html.twig
{% for label, flashes in app.session.flashbag.all %}
{% for flash in flashes %}
<div class="alert alert-{{ label }}">
{{ flash }}
</div>
{% endfor %}
{% endfor %}
{{form_start(search_form, {'action': path('papetarie_search_form'), 'method' : 'POST', 'attr': {'id': 'papetarie_search_form', 'class': 'form-inline'} })}}
<div class="input-group col-md-10">
{{ form_label(search_form.Keyword) }}
{{ form_errors(search_form.Keyword) }}
{{ form_widget(search_form.Keyword) }}
</div>
{{ form_widget(search_form._token) }}
{{form_end(search_form)}}
我正在显示表单的方式
<div class="col-md-12">
{{ render(controller('CatalogBundle:Default:showSearchForm')) }}
</div>
get_class_methods()
的输出array(42) {
[0]=>
string(11) "__construct"
[1]=>
string(7) "__clone"
[2]=>
string(9) "getConfig"
[3]=>
string(7) "getName"
[4]=>
string(15) "getPropertyPath"
[5]=>
string(10) "isRequired"
[6]=>
string(10) "isDisabled"
[7]=>
string(9) "setParent"
[8]=>
string(9) "getParent"
[9]=>
string(7) "getRoot"
[10]=>
string(6) "isRoot"
[11]=>
string(7) "setData"
[12]=>
string(7) "getData"
[13]=>
string(11) "getNormData"
[14]=>
string(11) "getViewData"
[15]=>
string(12) "getExtraData"
[16]=>
string(10) "initialize"
[17]=>
string(13) "handleRequest"
[18]=>
string(6) "submit"
[19]=>
string(4) "bind"
[20]=>
string(8) "addError"
[21]=>
string(11) "isSubmitted"
[22]=>
string(7) "isBound"
[23]=>
string(14) "isSynchronized"
[24]=>
string(24) "getTransformationFailure"
[25]=>
string(7) "isEmpty"
[26]=>
string(7) "isValid"
[27]=>
string(16) "getClickedButton"
[28]=>
string(9) "getErrors"
[29]=>
string(17) "getErrorsAsString"
[30]=>
string(3) "all"
[31]=>
string(3) "add"
[32]=>
string(6) "remove"
[33]=>
string(3) "has"
[34]=>
string(3) "get"
[35]=>
string(12) "offsetExists"
[36]=>
string(9) "offsetGet"
[37]=>
string(9) "offsetSet"
[38]=>
string(11) "offsetUnset"
[39]=>
string(11) "getIterator"
[40]=>
string(5) "count"
[41]=>
string(10) "createView"
}
我转储错误的方式,看看错误是什么
if(!$form->isValid()) {
echo "<pre>";
//var_dump($form->getErrors());
var_dump(get_class_methods($form));
}
如果我这样做
var_dump($form->getErrorsAsString());
我得到了
string(0) ""
虽然我还在寻找解决方案但我发现了一些有趣的东西。 如果我改变路线到/搜索例如而不是/ office / search并且我提交表格,表格获取数据并且工作得很好。
答案 0 :(得分:1)
动作返回语句必须像
return $this->render('CatalogBundle:Default:search_form.html.twig', array('search_form' => $form->createView()));
在exit;
之后添加print_r
。