Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Best practice pour insérer des données dans BDD


Sujet :

Laravel PHP

  1. #1
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    décembre 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 283
    Points : 125
    Points
    125
    Par défaut Best practice pour insérer des données dans BDD
    Bonjour à tous,


    Etant débutant dans Laravel, je suis confronté à des tutos expliquant par exemple comment insérer les données de formulaire dans une bdd.

    1er cas:
    Directement dans le controlleur avec la méthode "nouveau"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public function nouveau()
        {
     
            // Validation des données
            request()->validate([
                'category' => ['required'],
            ]);
     
            // Création d'un message dans la base de données avec Eloquent
            Message::create([
     
                'category' => request('category'),
            ]);
           return redirect()->route('home')->with('ok', __('La catégorie a bien été enregistrée'));
    }
    Second cas:
    apparemment il faut créer un request : php artisan make:request CategoryRequest avec notamment une méthode rules()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public function rules()
        {
            $id = $this->category ? ',' . $this->category->id : '';
            return $rules = [
                'category' => 'required|string|max:255|unique:categories,name' . $id,
            ];
        }
    et ensuite on complète la méthode store() du controlleur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function store(CategoryRequest $request)
    {
        Category::create($request->all());
        return redirect()->route('home')->with('ok', __('La catégorie a bien été enregistrée'));
    }

    Le second cas est plus compliqué à comprendre et à mettre en place.
    Mais si cette pratique existe c'est qu'elle a une raison.

    Pouvez-vous dans ce cas me donner qques explications ?

    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 180
    Points : 11 714
    Points
    11 714
    Par défaut
    La request est une classe de validation des données, donc rien à voir avec l'insertion.

    La tableau rules est ce qu'il faut valider pour la donnée précise.


    Dans le controller dans vos méthodes on passe souvent en injection Request $request , on récupère donc une instannce de Request

    Dans le cas de CategoryRequest c'est étendre la classe request n lui ajoutant les règles de validations.
    La méthode store prend don bien en paramètres une instance de Categoryrequest et va valider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    return $rules = [
                'category' => 'required|string|max:255|unique:categories,name' . $id,
            ];
    Désolé si je suis pas clair

    Voici de la lecture pour approfondir votre réflexion : https://maurice-chavelli.developpez....=la-validation

  3. #3
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    décembre 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 283
    Points : 125
    Points
    125
    Par défaut
    En gros elle fait la même chose qu'une validation directement dans le controlleur mais en plus costaud.

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    juin 2005
    Messages
    5 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : juin 2005
    Messages : 5 180
    Points : 11 714
    Points
    11 714
    Par défaut
    Oui, avec la possibilité de faire un redirect vers où tu veux et surtout de pouvoir la réutiliser.

  5. #5
    Membre habitué Avatar de legrandse
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    décembre 2010
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : décembre 2010
    Messages : 283
    Points : 125
    Points
    125
    Par défaut
    Parfait Merci.

    J'ai commencé la lecture du lien pour la validation.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    octobre 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : octobre 2014
    Messages : 20
    Points : 36
    Points
    36
    Par défaut
    Pour illuster l'exemple de l'utilité de la classe request avec ce que j'ai capté pour le moment:

    Controller chargé d'afficher un formulaire de contact, d'envoyer un mail après la validation des champs grâce à l'objet $request et charger la vue de confirmation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?php
     
    namespace App\Http\Controllers;
     
    use Illuminate\Http\Request;
    use App\Http\Requests\ContactRequest;
    use App\Mail\Contact;
     
    use Illuminate\Support\Facades\Mail;
     
    class ContactController extends Controller
    {
        public function create( ){
     
            return view('pages.contact');
        }
     
        public function store(ContactRequest $request)
        {
     
            Mail::to('toto@hotmail.fr')->send(new Contact($request->except('_token')));
     
            return view('pages.confirm');
     
        }
     
    }
    L'objet Request en question qui valide les champs dans la méthode rules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
     
    namespace App\Http\Requests;
     
    use Illuminate\Foundation\Http\FormRequest;
     
    class ContactRequest extends FormRequest
    {
        /**
         * Determine if the user is authorized to make this request.
         *
         * @return bool
         */
        public function authorize()
        {
            return true;
        }
     
        /**
         * Get the validation rules that apply to the request.
         *
         * @return array
         */
        public function rules()
        {
            return [
                'nom' => 'bail|required',
                'email' => 'bail|required|email',
                'tel' => 'bail|required',
                'message' => 'bail'
            ];
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/04/2019, 21h33
  2. Réponses: 7
    Dernier message: 24/11/2016, 22h02
  3. Réponses: 4
    Dernier message: 19/08/2011, 15h44
  4. [MySQL] aide pour parcourir un array multi et insérer des info dans bdd
    Par kairi084 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/12/2010, 19h18
  5. Insérer des données dans ma BDD
    Par griese dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 28/06/2006, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo