Symfony2表单没有显示任何错误但它没有显示

时间:2015-05-15 10:12:45

标签: php symfony

美好的一天,我在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并且我提交表格,表格获取数据并且工作得很好。

1 个答案:

答案 0 :(得分:1)

动作返回语句必须像

return $this->render('CatalogBundle:Default:search_form.html.twig', array('search_form' => $form->createView()));

exit;之后添加print_r