2016-04-12 2 views
0

Я хотел бы просмотреть ошибки формы, но я не работаю для меня.Как просмотреть ошибки формы

Я пробовал без AJAX, и я это ошибка

An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") 
in AppBundle:Admin:errors-form.html.twig at line 5. 

Я думаю, что проблема заключается в том, чтобы контур этой линии, используя прут:

'data' => $this->getErrorMessages($form), 

Это код

protected function getErrorMessages(\Symfony\Component\Form\Form $form) 
{ 
    $errors = array(); 

    foreach ($form->getErrors() as $key => $error) { 
     $errors[] = $error->getMessage(); 
    } 

    foreach ($form->all() as $child) { 
     if (!$child->isValid()) { 
      $errors[$child->getName()] = $this->getErrorMessages($child); 
     } 
    } 

    return $errors; 
} 


public function addAction(Request $request) 
{ 
    if ($form->isValid()) { 
     //.. 
    } else { 

     $view = $this->renderView(
      'AppBundle:Admin:errors-form.html.twig', array(
       'data' => $this->getErrorMessages($form), 
      ) 
     ); 
     $response = new JsonResponse(array(
       'view' => $view, 
       'result' => 0, 
       'message' => 'Invalid form', 
      ) 
     ); 
     return $response; 

    } 


} 

Это представление, возвращенное JsonResponse в случае ошибок, но ошибки не отображаются, , но если я ставлю статический текст в этом виде он будет появляться после того, как представить

<div id="error"> 

    {% for error in data %} 

     {{ error }} 

    {% endfor %} 
</div> 
+0

Можете ли вы опубликовать сообщение о том, что возвращает 'getErrorMessages'? – inaliahgle

+0

Форма с ajax, в консоли я получаю эту ошибку: 500 (Внутренняя ошибка сервера) – hous

+0

@inaliahgle Я пробовал это без ajax, и я это ошибка 'Исключение было брошено во время рендеринга шаблона («Обратите внимание: преобразование массива в строку») в AppBundle: Admin: errors-form.html.twig в строке 5.' – hous

ответ

0

Это должно быть два {% для%} цикла, и я установил его, как это и теперь он работает хорошо.

<div id="error"> 

    {% for data in data %} 
     {% for error in data %} 
      {{ error }}<br> 
     {% endfor %} 

    {% endfor %} 

</div> 
2

если вы хотите просто получить ошибки и не показывать их в веточке, нет необходимости в getErrorMessages. Вы можете передать форму $form к виду:

public function addAction(Request $request) 
{ 
    if ($form->isValid()) { 
    //.. 
} else { 
    $view = $this->renderView(
     'AppBundle:Admin:erreurs-form.html.twig', array(
      'form' => $form, 
     ) 
    ); 
    $response = new JsonResponse(array(
      'view' => $view, 
      'result' => 0, 
      'message' => 'Invalid form', 
     ) 
    ); 
    return $response; 
    } 
} 

и использовать встроенный в form_errors в веточке, чтобы принести ошибки и показать им:

{% if form_errors(form) %} 
<div id="error"> 
    {{ form_errors(form) }} 
</div> 
{% endif %} 

Или может получить ошибки в контроллере с помощью :

$view = $this->renderView(
     'AppBundle:Admin:erreurs-form.html.twig', array(
      'data' => $form->getErrors() 
     ) 
    ); 

и использовать это, чтобы справиться с этим в веточке:

<div id="error"> 
{% for error in data %} 
    {{ error.message }}   
{% endfor %} 
</div> 
+0

Это только wokrs '$ view = $ this-> renderView ('AppBundle: Admin: erreurs-form.html.twig', array ('form' => $ form-> createView(),)); ' и с точки зрения'

{{ form_errors(form) }} {% for children in form.children %} {% if not children.vars.valid %} {{ form_errors(children) }} {% endif %} {% endfor %}
' Но я предпочитаю не отображать снова эту' 'форму '=> $ form-> createView(),', я бы хотел просто вернуться ошибки – hous

0

Метод getErrors возвращает только первый уровень формы, который означает сама форма, а не ее дети.

Вы должны предоставить логический аргумент, чтобы глубоко в форме поиска метода: getErrors(true)

protected function getErrorMessages(\Symfony\Component\Form\Form $form) 
{ 
    // ... 

    foreach ($form->getErrors(true) as $key => $error) { 
     $errors[] = $error->getMessage(); 
    } 

    // ... 

    return $errors; 
} 

См Symfony документации http://symfony.com/doc/current/components/form/introduction.html#accessing-form-errors

EDIT

я не обратил внимание на начало. Ошибка в вас шаблоне связано со следующим фрагментом кода:

foreach ($form->all() as $child) { 
    if (!$child->isValid()) { 
     $errors[$child->getName()] = $this->getErrorMessages($child); 
    } 
} 

$this->getErrorMessages($child) фактически возвращая массив, а не строка. Вам нужно сделать следующее:

foreach ($form->all() as $child) { 
    if (!$child->isValid()) { 
     foreach ($this->getErrorMessages($child) as $error) { 
      $errors[$child->getName()] .= ' '.$error 
     } 

    } 
} 
Смежные вопросы