如何在控制器中显示验证消息


How to show Validation message in Controller?

我曾尝试在控制器中显示错误消息,但它不起作用,但当我使用dd时,它起作用。

我的代码:

if ($validation->fails())
{
    /*Doesn't work
    foreach ($validation->fails() as $messages) {
        $messages // Doesn't work
    }
    */
    dd($validation->errors); //This works
}

我注意到这里提供的示例都不起作用!给你。这是我在意识到validator->messages()返回一个不可检索的受保护对象后找到的解决方案。

if ($validator->fails())
{
    foreach ($validator->messages()->getMessages() as $field_name => $messages)
    {
        var_dump($messages); // messages are retrieved (publicly)
    }
}

我会引用MessageBag,这是messages()返回的内容。有关Validator类的其他确认信息,请参阅。

$validation->fails()返回输入是否通过验证的布尔值。您可以从$validation->messages()访问验证消息,也可以将它们传递到视图,在该视图中它们将绑定到$errors变量。

请参阅验证器文档。

这是我刚刚在artisan 5.0控制台命令中使用的,用于验证参数。这是在fire()方法中:

    // Create the validator.
    $validator = Validator::make(
        $this->argument(),
        ['field1' => 'required|other|rules']
    );
    // Validate the arguments.
    if ($validator->fails())
    {
        // Failed validation.
        // Each failed field will have one or more messages.
        foreach($validator->messages()->getMessages() as $field_name => $messages) {
            // Go through each message for this field.
            foreach($messages AS $message) {
                $this->error($field_name . ': ' . $message);
            }
        }
        // Indicate the command has failed.
        return 1;
    }

这是对@tfont 答案的扩展

如果此命令不是作为控制台命令(即CLI命令行)运行,则可能需要更改消息的发送位置($this->error())。