php - AJAX 模式下的验证错误

标签 php laravel laravel-4

目前我使用它通过 ajax 显示验证错误:

            if (data.validation_failed == 1)
            {
                var arr = data.errors;
                $.each(arr, function(index, value)
                {
                    if (value.length != 0)
                    {
                        $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
                    }
                });
                $('#ajax-loading').hide();
                $("#validation-errors").show();
            }

它工作正常,完全符合我的需要。

问题是我必须做些什么才能将错误从 laravel 传输到 ajax:

    $rules = array( 
        'name'  => 'required',
        'password' => 'required'
    );

    $v = Validator::make(Input::all(), $rules);

    if ( ! $v->passes())
    {

    $messages = $v->messages();

    foreach ($rules as $key => $value)
    {
        $verrors[$key] = $messages->first($key);
    }

        if(Request::ajax())
        {                    
            $response_values = array(
                'validation_failed' => 1,
                'errors' => $verrors);              
        return Response::json($response_values);
        }
        else
        {
        return Redirect::to('login')
            ->with('validation_failed', 1)
            ->withErrors($v);
        }       

    }

如果我想将字段名作为键,我必须迭代 $rules,但即使我不使用字段名作为键,我也必须迭代错误消息来构造 $verrors。

如何在不需要迭代的情况下将 $v->messages() 转换为等效的 $verrors?由于 Response::json() 需要一个数组而不是一个对象。

最佳答案

最简单的方法是利用验证器的 MessageBag 对象。可以这样做:

// Setup the validator
$rules = array('username' => 'required|email', 'password' => 'required');
$validator = Validator::make(Input::all(), $rules);

// Validate the input and return correct response
if ($validator->fails())
{
    return Response::json(array(
        'success' => false,
        'errors' => $validator->getMessageBag()->toArray()

    ), 400); // 400 being the HTTP code for an invalid request.
}
return Response::json(array('success' => true), 200);

这会给你一个像这样的 JSON 响应:

{
    "success": false,
    "errors": {
        "username": [
            "The username field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}

关于php - AJAX 模式下的验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097797/

相关文章:

php - Laravel attach() 方法不适用于 hasMany 端

mysql - 让 Laravel 在插入/更新时使用 MySQL 默认值

php sql while循环仅插入最后一条记录

javascript - 如何使用 JQuery 和 Laravel 从数据库中删除

php - "x-powered by"是什么意思?

php - 如何在 Laravel 中将 INFO 记录到单独的文件中

php - Laravel/Eloquent 建议覆盖特征属性?

php - Laravel - 填充选择 optgroup 下拉列表,按名称对记录进行分组

javascript - 如果屏幕是触摸设备,PHP 包含特定文件吗?

php - PDO 不绑定(bind)占位符