Solución:
Por favor intente de esta manera
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());
}
}
dígitos: valor
El campo bajo validación debe ser numérico y debe tener una longitud exacta de valor.
Veo algunas respuestas útiles aquí, solo quiero agregar: que mi preferencia es que las funciones del controlador solo se ocupan de solicitudes válidas. Así que guardo toda la validación en la solicitud. Laravel inyecta la solicitud en la función del controlador después de validar todas las reglas dentro de la solicitud. Con un pequeño ajuste (o mejor aún, un rasgo), el FormRequest estándar funciona muy bien para validar publicaciones json.
Cliente ejemplo.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));
proyecto / rutas / api.php
Route::any('endpoint', function (AppHttpRequestsMyJsonRequest $request){
dd($request->all());
});
app / Http / Requests / MyJsonRequest.php (generado por php artisan make:request MyJsonRequest
)
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class MyJsonRequest 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();
}
}
Tu carga útil debe ser payload: {
entonces puedes hacer
$this->validate($request->payload, [
'name' => 'required|digits:5',
'age' => 'required|digits:5',
]);
o si no está enviando la clave de carga útil, puede usar $ request-> all ()