0
votes

La validation de la demande de formulaire ne fonctionne pas. Il charge juste la page d'accueil dans Postman

J'essaie de valider les données d'entrée avec une demande de formulaire personnalisé. Le nom de la demande de formulaire est UpdatePassword. Et j'essaye d'exécuter le code en l'injectant dans ma fonction updatePassword () dans mon Api / AuthController. I et il redirige juste vers la page d'accueil

<?php

use Illuminate\Http\Request;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::group(['namespace' => 'Api'], function (){

    Route::group(['prefix' => 'user'], function (){

        Route::post('changePassword', 'AuthController@updatePassword');
    });
});

Here is the postman request and response  

[![Here is the postman request and response][1]][1]


when I 

Mon contrôleur

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Database\QueryException;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Http\Response;
use Illuminate\Validation\ValidationException;

class Handler extends ExceptionHandler
{
    /**
     * A list of the exception types that are not reported.
     *
     * @var array
     */
    protected $dontReport = [
        //
    ];

    /**
     * A list of the inputs that are never flashed for validation exceptions.
     *
     * @var array
     */
    protected $dontFlash = [
        'password',
        'password_confirmation',
    ];

    /**
     * Report or log an exception.
     *
     * @param  \Exception  $exception
     * @return void
     */
    public function report(Exception $exception)
    {
        parent::report($exception);
    }

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        return parent::render($request, $exception);
    }

  }

Mes exceptions / Handler.php

<?php

namespace App\Http\Controllers\API;

use App\Http\Requests\Api\UpdatePassword;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;


class AuthController extends controller
{

    public function updatePassword(UpdatePassword $request){


            dd($request->all());
    }
}

Voici mon itinéraire

<?php

namespace App\Http\Requests\Api;

use Illuminate\Foundation\Http\FormRequest;

class UpdatePassword extends FormRequest
{


    public function authorize()
    {
        return true;
    }
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {

        return [
            'email' => 'required|string|email|max:255|exists:users,email',
            'old_password' => 'required|string',
            'password' => 'required|string|confirmed'
        ];
    }
}

essayez d'exécuter le code dans postman comme une requête ajax, cela ne fonctionne pas. la validation ne fonctionne pas. il rend simplement la page d'accueil. hôte local: 8000


11 commentaires

où avez-vous défini vos routes API?


@sandy je ne comprends pas votre question


Route :: group (['prefix' => 'user'], function () {Route :: post ('changePassword', 'AuthController @ updatePassword');}); dans quel fichier vous avez écrit ceci?


Je ne pense pas que votre demande touche le bon contrôleur. Comme le dit @sandy, vous devez nous dire où vos itinéraires sont définis.


laravel.com/docs/5.8/validation#creating-form-requests vous pouvez vous référer à ce lien


pourriez-vous montrer vos routes/api.php


@sandy c'est ma route


vous définissez déjà vos itinéraires dans le fichier API.php, donc je pense que vous n'avez pas besoin d'ajouter un "espace de noms" ici


@sablonneux. L'espace de noms est dû au fait que j'ai défini mon AuthController dans ../controllers/Api/AuthController.


Appelez-vous la route depuis Postman avec l'en-tête HTTP Accept: application/json (ou l'équivalent Content-Type )?


Essayez de faire cette public function updatePassword(Request $request) { dd($request->all()); } pour vous assurer que le problème vient de la validation de la demande personnalisée ou de quelque chose d'autre.


3 Réponses :


0
votes
you can try with this validator syntex. i have used.
$validator = Validator::make($request->all(), [         
        'email' => 'required|email', 
        'password' => 'required',   
        ]);
        $temp = $validator->errors()->all();
        if ($validator->fails()) {
            return response()->json(['Status' => 
  false,'Message'=>$temp[0],'Data' => '','Status_code' =>"401" ]);            
        }

1 commentaires

Je souhaite créer une demande de validation personnalisée. Je ne veux pas valider dans le contrôleur



2
votes

Appelez-vous la route depuis Postman avec l'en-tête HTTP Accept: application/json (ou l'équivalent Content-Type )?

Si vous ne mettez pas que Laravel ne sait pas que vous voulez une réponse json et vous redirigerait vers la page d'accueil (je pense que cela sera par défaut parce que vous n'avez pas d'en-tête de référent défini sur votre demande) avec des erreurs dans la session.


0 commentaires

0
votes

Si la validation échoue lors de l'utilisation d'une demande de formulaire, une réponse de redirection sera générée pour renvoyer l'utilisateur à son emplacement précédent. C'est pourquoi vous redirigez vers la page au lieu de la réponse JSON.

Laravel a une méthode protégée "failedValidation". Vous devez remplacer cette méthode dans votre classe de demande de formulaire qui est UpdatePassword.php dans le cas ci-dessus en ajoutant l'extrait de code ci-dessous à. . . .

    use Illuminate\Contracts\Validation\Validator;
    use Illuminate\Http\Exceptions\HttpResponseException;
    
    
    
    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException(response()->json($validator->errors(), 422));
    }


0 commentaires