Saltar al contenido

Laravel: validar el objeto json

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 ()

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *