Laravel:ValidationException :: withMessages没有发送所有错误

时间:2018-12-12 23:52:19

标签: laravel laravel-5

我正在尝试在Laravel中进行一些验证。我有一个带有嵌套资源的资源,所以我需要一次验证很多东西。我有一个Level,它由许多Questions组成。因此,为了验证它们,我首先验证了Level,然后一个一个地验证了每个问题。

我使用以下方法:

public function ValidateDataAgainstModel($data) {
    $book = Level::ValidationBook(); // Or Answer::ValidationBook()
    $validator = Validator::make($data,
        $book['rules'],
        $book['messages']);
    if ($validator->fails()) {
        return $validator->errors();
    }
    return null;
}

该方法在“级别”和“问题”中使用,因此相同。 然后将所有错误归为一个数组:

$errors = [];
$errors['level'] = $levelError;
$errors['questions'] = $questionsErrors; //$questionErrors is an array of each question errors

然后检查我的数组是否正确,我做了一个\Log::info($errors)并得到以下结果:

[2018-12-12 23:47:12] local.INFO: array (
  'level' => 
  Illuminate\Support\MessageBag::__set_state(array(
     'messages' => 
    array (
      'name' => 
      array (
        0 => 'Se requiere el nombre del nivel',
      ),
    ),
     'format' => ':message',
  )),
  'questions' => 
  array (
    0 => 
    Illuminate\Support\MessageBag::__set_state(array(
       'messages' => 
      array (
        'description' => 
        array (
          0 => 'Se requiere la descripción de la pregunta',
        ),
      ),
       'format' => ':message',
    )),
    1 => 
    Illuminate\Support\MessageBag::__set_state(array(
       'messages' => 
      array (
        'description' => 
        array (
          0 => 'Se requiere la descripción de la pregunta',
        ),
      ),
       'format' => ':message',
    )),
  ),
) 

如您所见,我有两个有错误的问题。为了将其退还给我的客户,当我执行以下操作

if ( count($errors) > 0 ) {
    throw ValidationException::withMessages($errors);
}

但是,当数据到达我的客户端时,问题错误并不完整。我没有得到带有一系列问题错误的索引,而是仅遇到一个问题错误。

This is the console.log of the errors

有人知道为什么会这样吗?似乎将错误归为一个错误。

最后,我将添加计算结果的整个方法:

public function Create($data) {

    // Create array to handle all the nested resources
    $errors = [];

    // Validate that the data array is correct
    $levelErrors = $this->ValidateDataAgainstModel($data);
    if ( !is_null($levelErrors) ) {
        $errors['level'] = $levelErrors;
    }

    $questionsErrors = [];
    foreach($data['questions'] as $questionData) {
        /*
        * We remove the level_id because we are validating the
        * question content
        */
        $validationBook = Question::ValidationBook();
        unset($validationBook['rules']['level_id']);
        $questionErrors = QuestionService::ValidateDataAgainstModel($questionData, $validationBook);
        if ( !is_null($questionErrors) ) {
            $questionsErrors[$questionData['index']] = $questionErrors;
        }
    }
    if ( count($questionsErrors) > 0 ) {
        $errors['questions'] = $questionsErrors;
    }

    if ( count($errors) > 0 ) {
        \Log::info($errors);
        throw ValidationException::withMessages($errors);
    }

    // Create the object
    $result = Level::create($data);
    return $result;
}

我不知道问题是否出在ValidationException Source Code

上。

0 个答案:

没有答案