1

我目前正在测试 laravel 4,但我有一个问题,在 laravel 文档中返回错误消息是这样描述$messages->first('email');messages

我的控制器

public function postSignup()
    {
        $rules = array(
            'display_name'     => 'required|unique:users',
        );

        $messages = array(
            'display_name.required' => 'Felhasználónév kötelező',
            'display_name.unique'   => 'Ez a Felhasználónév foglalt',
        );

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

        if ($val->passes()) 
        {
            $data = array('msg' => 'yay');
        }
        else
        {
            print_r($messages->first('display_name'));
        }

        return Response::json($data);
    } 

{“错误”:{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member function first() on a non-object"

如果我只尝试all测试 print_r($messages->all()); 我得到以下

{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to a member function all() on a non-object"

可以请有人指出我做错了什么吗?

4

3 回答 3

3

你可以试试这个

if ($val->passes()) 
{
    $data = array('msg' => 'yay');
}
else
{
    $messages = $validator->messages();
    $data = array('msg' => $messages->first('display_name'));
}
return Response::json($data);

print_r(...);incontroller将在模板之外打印输出。在客户端,您可以检查msg类似的内容(jQuery例如使用)

$.get('url', function(data){
    if(data.msg == 'yay')
    {
        // success
    }
    else
    {
        // failed, so data.msg contains the first error message
    }
});
于 2013-06-16T22:47:35.050 回答
0

Validator::make 方法只接受两个参数。

于 2013-06-16T15:05:45.030 回答
0

您正在访问传递给验证器的消息数组,而不是验证器创建的错误消息。将您的代码更改为:

$val->messages()->first('email')

注意:validator::make 方法接受 3 个参数:

/**
 * Create a new Validator instance.
 *
 * @param  array  $data
 * @param  array  $rules
 * @param  array  $messages
 * @return \Illuminate\Validation\Validator
 */
public function make(array $data, array $rules, array $messages = array())
于 2013-06-16T20:15:14.067 回答