2014-04-18 128 views
13

我目前正在尝试如何使用Laravel构建RESTful API,并且我目前正在创建新用户。这只是一个测试,我在使用Laravel中的验证尝试验证请求时得到了一些结果;这里是结果:Laravel中的REST API验证请求时

enter image description here

我一直在试图通过这个代码来创建一个新的:

public function store() 
{ 

    $validation = Validator::make(Request::all(),[ 
     'username' => 'required|unique:users, username', 
     'password' => 'required', 
    ]); 

    if($validation->fails()){ 


    } else{ 
      $createUser = User::create([ 
       'username' => Request::get('username'), 
       'password' => Hash::make(Request::get('password')) 
      ]); 
    } 
} 

但我不知道如何验证返回错误。但是,当我试图用validation->fails()来做if时,它一直给我HTML中的图像。有没有办法以JSON格式获得验证?

回答

17

您应该返回错误(这是Illuminate\Support\MessageBag的一个实例)并对其进行编码。 A MessageBag实例允许您将其直接转换为其JSON表示。

$errors = $validation->errors(); 

return $errors->toJson(); 

现在不嘟我自己的号角,但我最近开发了Laravel一个RESTful API包,它确实这一切为你和所有你需要做的是抛出一个简单的异常。请参阅我的dingo/api包和维基returning errors。基本上,而不是返回错误,你会抛出一个异常。

throw new Dingo\Api\Exception\StoreResourceFailedException('Could not create a new user.', $validation->errors()); 

它将由以下JSON表示。

{ 
    "message": "Could not create a new user.", 
    "errors": { 
     "username": ["The username is already in use."] 
    } 
} 
+0

生病试试你的包后,我做这项工作。问题是它将if($ validation-> failed()){}返回到我的终端的html中,所以你最终会返回一些html,然后它不会读取下面的代码行。那我的理论究竟发生了什么呢.. – Aoi

+0

来自它。我必须指定内容类型。我在这里找到答案http://stackoverflow.com/questions/7172784/how-to-post-json-data-with-curl-from-terminal-commandline-to-test-spring-rest – Aoi

+0

你应该听到你的号角。 Dingo现在是非常受欢迎的套餐。所以,感谢您的支持! –

3

Laravel提供开箱即用的,你可以从你的控制器调用验证方法。

如果选中Laravel Controller抽象类,你会发现它采用了一种名为ValidatesRequests

abstract class Controller extends BaseController 
{ 
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests; 
} 

所以,你可以使用的方法$this->validate(Request $request, array $rules);,你长的特点为您的控制器类扩展控制器

的完整的方法声明是

public function validate(Request $request, array $rules, array $messages = [], array $customAttributes = []) 
    { 
     $validator = $this->getValidationFactory()->make($request->all(), $rules, $messages, $customAttributes); 

     if ($validator->fails()) { 
      $this->formatValidationErrors($validator); 
     } 
    } 

如果$ validator失败,该方法将抛出一个错误取决于请求类型,如果它是ajax(在这种情况下,您应该在请求标头(Accept application/json)中包含它将返回包含验证错误的JSON响应。

11

这些代码将帮助你,为我工作。

$response = array('response' => '', 'success'=>false); 
$validator = Validator::make($request->all(), $rules); 
    if ($validator->fails()) { 
     $response['response'] = $validator->messages(); 
    }else{ 
//process the request 
} 
return $response; 
+0

这个回答值得信赖。我试过所有的解决方案,并且这个在Laravel 5.2中给了我正确的信息。 –

+1

谢谢@GlennPlas – bhupendraosd