フォームをデバッグするには、$form->getErrorsAsString()
代わりに$form->getErrors()
.
$form->getErrorsAsString()
フォームをデバッグするためにのみ使用する必要があります... の場合ではない各子要素のエラーが含まれます$form->getErrors()
。
ピーターが言及しているよう$form->getErrors()
に、子フォームのすべてのエラーの合計は返されません。
フォームが無効で、getErrors() が空の配列を返す仕組みを理解するには、symfony フォーム クラスのisValid()メソッドを参照してください。ご覧のとおり、フォームが有効でないケースが 2 つあります。最初のケースは一般的なフォームのテストであり、2 番目のケースは各子要素のテストです。
public function isValid()
{
//...
//CASE I : IF CHILD ELEMENTS HAVE ERRORS, $this->errors WILL CONTAIN
//THE ERROR ON THE CHILD ELEMENT AND NOT ON THE GENERAL 'errors' FIELD
//ITSELF
if (count($this->errors) > 0) {
return false;
}
//CASE II: AND THIS IS WHY WE ARE TESTING THE CHILD ELEMENTS AS WELL
//TO CHECK WHETHER THERE ARE VALID OR NOT
if (!$this->isDisabled()) {
foreach ($this->children as $child) {
if (!$child->isValid()) {
return false;
}
}
}
return true;
}
したがって、各フォームの子にはエラーが含まれる可能性がありますが、$form->getErrors()
それ自体がすべてのエラーを返すわけではありません。多くの子要素を持つフォームを考えると、CSRF が正しくない場合、通常 $form->getErrors() で CSRF エラーが発生します。