这是我第一次在laravel中使用验证。我试图在下面的json对象上应用验证规则。 json对象名称是有效负载,下面给出了示例。
payload = {
"name": "jason123",
"email": "[email protected]",
"password": "password",
"gender": "male",
"age": 21,
"mobile_number": "0322 8075833",
"company_name": "xyz",
"verification_status": 0,
"image_url": "image.png",
"address": "main address",
"lattitude": 0,
"longitude": 0,
"message": "my message",
"profession_id": 1,
"designation_id": 1,
"skills": [
{
"id": 1,
"custom" : "new custom1"
}
]
}
验证码如下所示,出于测试目的,我将名称验证为数字。当我执行下面的代码时,上面的json对象被批准并插入到我的数据库中。相反,它应该给我一个例外,因为我传递名称与字母数字值,我做错了什么:
public function store(Request $request)
{
$this->validate($request, [
'name' => 'digits',
'age' => 'digits',
]);
}
请尝试这种方式
use Validator;
public function store(Request $request)
{
//$data = $request->all();
$data = json_decode($request->payload, true);
$rules = [
'name' => 'digits:8', //Must be a number and length of value is 8
'age' => 'digits:8'
];
$validator = Validator::make($data, $rules);
if ($validator->passes()) {
//TODO Handle your data
} else {
//TODO Handle your error
dd($validator->errors()->all());
}
}
验证字段必须是数字,并且必须具有确切的值长度。
我在这里看到了一些有用的答案,只想添加 - 我的偏好是控制器函数只处理有效请求。所以我在请求中保留所有验证。在验证请求中的所有规则后,Laravel将请求注入控制器功能。通过一个小的调整(或更好的特性)标准FormRequest非常适合验证json帖子。
客户端example.js
var data = {first: "Joe", last: "Dohn"};
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST",'//laravel.test/api/endpoint');
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(JSON.stringify(data));
项目/路由/ api.php
Route::any('endpoint', function (\App\Http\Requests\MyJsonRequest $request){
dd($request->all());
});
app / Http / Requests / MyJsonRequest.php(由php artisan make:request MyJsonRequest
生成)
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class TrafficRequest extends FormRequest{
public function authorize(){
return true;//you'll want to secure this
}
public function rules(){
return [
'first' => 'required',
'last' => 'required|max:69',
];
}
//All normal laravel request/validation stuff until here
//We want the JSON...
//so we overload one critical function with SOMETHING LIKE this
public function all($keys = null){
if(empty($keys)){
return parent::json()->all();
}
return collect(parent::json()->all())->only($keys)->toArray();
}
}
你的有效载荷应该是payload: {
然后你可以做
$this->validate($request->payload, [
'name' => 'required|digits:5',
'age' => 'required|digits:5',
]);
或者如果您没有发送有效负载密钥,您可以使用$ request-> all()
使用Validator
工厂类,而不是使用从控制器特征派生的validate
方法。它接受有效负载的数组,因此您需要先解码它
\Validator::make(json_decode($request->payload, true), [
'name' => 'digits',
'age' => 'digits',
]);