Identifier les problèmes liés à la validation de ce formulaire
P粉296080076
P粉296080076 2023-08-31 17:10:00
0
2
530
<p>J'utilise Laravel 5.8 et j'ai créé cette méthode de contrôleur pour créer des enregistrements dans la base de données. </p> <pre class="brush:php;toolbar:false;">fonction publique doTheUpload(Request $request) { essayer{ $request->valider([ 'video' => 'nullable|mimes:mp4', 'video_thumb' => 'obligatoire|mimes:jpg,png,jpeg', 'video_name' => 'obligatoire', 'video_desc' => 'nullable', 'available_download' => 'nullable', ],[ 'video.mimes' => 'le format de fichier vidéo n'est pas valide', 'video_thumb.required' => 'le téléchargement de la miniature de la vidéo est requis', 'video_name.required' => 'vous devez entrer le nom de la vidéo', 'video_thumb.mimes' => 'le format du fichier de vignette de l'image n'est pas valide', ]); //Faire le processus de téléchargement }attraper(Exception $e){ jj($e); } }</pré> <p>Mais cela ne fonctionnera pas et renvoie cette erreur : </p> <h2><strong>Les données fournies ne sont pas valides. </strong></h2> <p>Cela est essentiellement dû aux demandes de validation du formulaire et lorsque je supprime ces validations de la méthode, cela fonctionne très bien. </p> <p>Alors, quel est le problème avec la validation des requêtes de formulaire qui renvoient cette erreur ? </p> <p>Si vous le savez, faites-le-moi savoir... J'apprécierais vraiment toutes vos idées ou suggestions. </p> <p>Merci. </p>
P粉296080076
P粉296080076

répondre à tous(2)
P粉569205478

Vous devez préciser exactement ce que vous souhaitez vérifier :

$request->validate([
    'request.video' => 'nullable|mimes:mp4',
    'request.video_thumb' => 'required|mimes:jpg,png,jpeg',
    'request.video_name' => 'required',
    'request.video_desc' => 'nullable',     
    'request.available_download' => 'nullable',
], [
    'request.video.mimes' => 'video file format is not valid',
    'request.video_thumb.required' => 'uploading video thumbnail is required',
    'request.video_name.required' => 'you must enter name of video',
    'request.video_thumb.mimes' => 'image thumbnail file format is not valid',
]);

Mon exemple de code :

$requestData = $request->request_data;
        
        // data
        $company_name = $requestData['company_name'];
        $company_type = $requestData['company_type'];
        $company_address = $requestData['company_address'];
        $latitude = $requestData['latitude'];
        $longitude = $requestData['longitude'];
        $company_branch_count = $requestData['company_branch_count'];
        $yes_radio = strval($requestData['yes_radio']);
        $no_radio = strval($requestData['no_radio']);
        $company_contact_user_first_name = $requestData['company_contact_user_first_name'];
        $company_contact_user_last_name = $requestData['company_contact_user_last_name'];
        $company_contact_user_email = $requestData['company_contact_user_email'];
        $company_contact_user_password = $requestData['company_contact_user_password'];
        $company_contact_user_phone = $requestData['company_contact_user_phone'];
        $company_kvkk_ok = strval($requestData['company_kvkk_ok']);
        $shipping_method_yourself = $yes_radio === 'true' && $yes_radio != $no_radio ? 1 : 0;

        if ($company_kvkk_ok == 'false') {
            return json_encode([
                'operation_status' => 'error',
                'error_messages' => 'no',
            ]);
        }

        // Validate
        $validator = Validator::make($request->all(), [
            "request_data.company_name" => "required|string|min:5",
            "request_data.company_type" => "required|in:0,1,2,3,4,5,6,7,8,9,10,11,12",
            "request_data.company_address" => "required",
            "request_data.latitude" => "required",
            "request_data.longitude" => "required",
            "request_data.company_branch_count" => "required|integer",
            "request_data.yes_radio" => "required",
            "request_data.no_radio" => "required",
            "request_data.company_contact_user_first_name" => "required",
            "request_data.company_contact_user_last_name" => "required",
            "request_data.company_contact_user_email" => [
                'required',
                'email',
                Rule::unique('users', 'email')->where(function ($query) use ($company_contact_user_email) {
                    return $query->where('email', $company_contact_user_email);
                }),
                Rule::unique('companies', 'company_contact_user_email')->where(function ($query) use ($company_contact_user_email) {
                    return $query->where('company_contact_user_email', $company_contact_user_email);
                }),
            ],
            "request_data.company_contact_user_password" => "required|min:6",
            "request_data.company_contact_user_phone" => "required",
            "request_data.company_kvkk_ok" => "required",
        ], [
            'request_data.company_name.required' => __('company name required'),
            'request_data.company_name.string' => __('company name must be string'),
            'request_data.company_name.min' => __('company name must be at least 5 characters'),
            'request_data.company_type.required' => __('company type required'),
            'request_data.company_type.in' => __('company type invalid'),
            'request_data.company_address.required' => __('company address required'),
            'request_data.latitude.required' => __('latitude required'),
            'request_data.longitude.required' => __('longitude required'),
            'request_data.company_branch_count.required' => __('company branch count required'),
            'request_data.company_branch_count.integer' => __('company branch count must be integer'),
            'request_data.yes_radio.required' => __('yes radio required'),
            'request_data.no_radio.required' => __('no radio required'),
            'request_data.company_contact_user_first_name.required' => __('company contact user first name required'),
            'request_data.company_contact_user_last_name.required' => __('company contact user last name required'),
            'request_data.company_contact_user_email.required' => __('company contact user email required'),
            'request_data.company_contact_user_email.email' => __('company contact user email invalid'),
            'request_data.company_contact_user_email.unique' => __('email already taken'),
            'request_data.company_contact_user_password.required' => __('company contact user password required'),
            'request_data.company_contact_user_password.min' => __('company contact user password must be at least 6 characters'),
            'request_data.company_contact_user_phone.required' => __('company contact user phone required'),
            'request_data.company_kvkk_ok.required' => __('company kvkk ok required'),
        ]);

        if ($validator->fails()) {
            $messages = $validator->messages();
            return json_encode([
                'operation_status' => 'not_validated',
                'request' => $requestData,
                'messages' => $messages,
            ]);
        }
P粉278379495

Lorsque vous utilisez la validation de Laravel, vous devez laisser Laravel gérer les erreurs car Laravel lancera automatiquement une exception lorsqu'une règle échoue. Par conséquent, la première suggestion est de ne pas utiliser de blocs try-catch dans les routines de validation.

Comme le dit la documentation Laravel : p>

De plus, je vous recommande de ne pas utiliser la validation dans votre contrôleur car selon les bonnes pratiques, il est recommandé de créer un formulaire séparé pour la validation, vous devez donc légèrement modifier votre contrôleur pour inclure une classe validateur :

<?php

namespace App\Http\Controllers;

...
use App\Http\Requests\UploadVideoRequest;

...

public function doTheUpload(UploadVideoRequest $request)
{
    /*
    * Here where are calling validation as UploadVideoRequest
    */

    // logic for valid uploaded video
}

Vous devez maintenant créer une demande de formulaire, peut-être en utilisant php artisan make:request UploadVideoRequest Cette commande créera une classe de demande de formulaire sous app/Http/Requestsapp/Http/Requests que vous devrez remplir avec :

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UploadVideoRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        /*
        * here you should check if the user is authorized to upload video 
        * or let in true if anyone can do that
        */
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'video' => 'nullable|mimes:mp4',
            'video_thumb' => 'required|mimes:jpg,png,jpeg',
            'video_name' => 'required',
            'video_desc' => 'nullable',
            'available_download' => 'nullable',
        ];
    }

    /**
     * Define messages to return if an error is detected.
     *
     * @return array
     */

    public function messages()
    {
        return [
            'video.mimes' => 'video file format is not valid',
            'video_thumb.required' => 'uploading video thumbnail is required',
            'video_name.required' => 'you must enter name of video',
            'video_thumb.mimes' => 'image thumbnail file format is not valid',
        ];
    }

}

En utilisant cette approche, Laravel valide les entrées de l'utilisateur et gère les erreurs via des exceptions.

Salutations.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!