Laravel 6

Plusieurs questions sur mon code (AJAX)

Avatar de dadub
dadub

Bonjour tout le monde,

Je suis occupé à redévelopper une application existante, mais cette fois avec un framework qui est Laravel6.

Je voudrais donc coder convenablement dès le départ en respectant un maximum les conventions de ce magnifique framework.

J'ai codé une premère partie de mon site avec AJAX, mais je ne pense pas que je respecte les conventions de Laravel, j'ai donc plusieurs questions :

1- Est-ce que les fichiers js doivent obligatoirement se mettre dans le dossier public ? 2- Voici mon fichier js avec l'api AJAX, est-il correct ?

$(document).ready(function()
{
    $('#inscription_registre_national').change(function()
    {
        var niss = $(this).val();
        $.ajaxSetup({
            headers:{
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        $.ajax(
        {     

            type: 'POST',
            url: 'niss',
            dataType: 'text',
            data:{
                'niss':niss
            },
            success:function(retour)
            {
                if(retour > 0)
                {
                    //DD 08/02/20 permet d'indiquer que le niss est déjà dans la DB, je remove la class et je la remets autrement, il garde toujours la même classe (rouge ou verte)
                    
                    
                    $('#resultat_check_niss').removeClass().addClass('invalid-feedback').text('Ce numéro de registre national existe déja dans la base de données, si vous avez oublié votre mot de passe, veuillez svp cliquer sur ce lien').show();
                    
                    
                }
                else
                {
                    $('#resultat_check_niss').removeClass().addClass('valid-feedback').text('Numéro valide et non présent dans la base de données.').show();
                }
                
            },
            error:function(callback)
            {
                console.log(callback);
                alert("dans Erreur");
            }
        });

    });


            });
        }
        
    });
    
});

3- Voici la route :

Route::post('niss', 'NissController@check_Niss');

4- Ce qui me dérange le plus, c'est le controller qui fait tout le boulot, je ne suis pas censé appeler un modèle ?

Code du controller :

<?php

namespace App\Http\Controllers;

//ce use permet d'utiliser DB
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;

class NissController extends Controller
{
    public function check_Niss(Request $request)
    {
        //ceci devrait se faire via un modèle (car DB !!!!)
        if(DB::table('pharmaciens')->where('registre_national', $_POST['niss'])->exists())
        {
            $retour = 1;
        }
        else{
            $retour = 0;
        }
        echo $retour;
        
    }
}

5- Ici, je ne modifie rien, donc normalemnt pas besoin de Filable ?

6- J'ai vu un exemple de code qui ressemble à ceci (hors de mon programme) :

public function show($id)
    {
        $task = Task::find($id);

        return response()->json([
            'error' => false,
            'task'  => $task,
        ], 200);
    }

Je ne vois nulle part la méthode show dans un modèle, on appelle les méthodes d'Eloquent ?

7- Avez-vous quelque chose d'autre à me conseiller afin d'améliorer mon code (niveau sécurité par exemple) ?

Merci d'avance pour l'aide.

Avatar de bestmomo
bestmomo

Salut,

Avec Laravel on a aucun a priori concernant le codage côté client, même si certaines solutions sont proposées. Donc chacun est libre de coder comme il veut côté client. Laravel embarque mix qui simplifie la gestion du style et des scripts mais ce n'est pas non plus une obligation. Laravel est un framework serveur qui peut s'adapter à toutes les situations.

Une application existante côté client peut se greffer sans problème sur Laravel pour éviter d'avoir à retoucher beaucoup de choses.

En ce qui concerne le contrôleur qui fait tout le boulot c'est une autre histoire...

Déjà on a des helpers pour récupérer les paramètres sans avoir à aller les chercher avec $POST, d'autre part tu peux utiliser Eloquent pour générer la requête, ça pourrait ressembler à ça :

public function check_Niss(Request $request)
{
    return Pharmacien::whereRegistreNational($request->niss)->count() > 0 ? 1 : 0;
}

Dans le contrôleur on prévoit en général une méthode pour chacune des routes de l'application.

Vous ne pouvez pas répondre à ce sujet.