Laravel 5

Création d'un compte

  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    Bonjour à tous,
    Je débute sur Laravel et j'ai voulu faire un système de compte, j'ai donc fait un make:auth, niquel tout marche, j'ai traduit rapidement les champs qui m'intéressais, ..

    Mais sur mon site j'aimerais mettre un système de VIP.
    Comment puis-je ajouter une requête avec le VIP?

    Je m'explique, je ne veux pas de champ de texte, mais en revanche quand l'utilisateur s'inscrit, le vip = 0.

    Voici les modifications que j'ai effectué:
    'vip' => "0", J'ai ajouter ceci dans la fonction:create de mon register.
    $table->string('vip'); Et ceci dans mon table migration (ma table se créer bien comme il faut)

    Voici mon erreur:

    SQLSTATE[HY000]: General error: 1364 Field 'vip' doesn't have a default value (SQL: insert into users (name, email, password, updated_at, created_at) values (username, email@gmail.com, motdepasse, 2017-10-09 12:40:31, 2017-10-09 12:40:31))

  • Avatar de Xklusive
    Membre depuis :
    26/09/2017
    Messages :
    5

    Salut,

    Dans ta migrationn chaîne la méthode 'default':
    $table->string('vip')->default('0');

    En revanche, stocker un integer dans un champ string, c'est pas ce qui est le plus efficace.

  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    Merci, du coup j'enlève mon 'vip' => 0 dans le create?

  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    J'ai encore une erreur:
    General error: 1364 Field 'vip' doesn't have a default value (SQL: insert into users (name, email, password, updated_at, created_at) values (user, mail@gmail.com, password, 2017-10-09 14:01:56, 2017-10-09 14:01:56))

    Mon fichier:
    <?php

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;

    class CreateUsersTable extends Migration
    {
    /**

    • Run the migrations.
    • @return void
      */
      public function up()
      {
      Schema::create('users', function (Blueprint $table) {
      $table->increments('id');
      $table->string('name');
      $table->string('email')->unique();
      $table->string('password');
      $table->boolean('vip')->default('0');
      $table->rememberToken();
      $table->timestamps();
      });
      }

      /**

    • Reverse the migrations.
    • @return void
      */
      public function down()
      {
      Schema::dropIfExists('users');
      }
      }
  • Avatar de Devonab
    Membre depuis :
    12/02/2016
    Messages :
    23

    Hello,
    Vu que tu utilises un boolean, la valeur par défaut ne doit pas être une chaîne de caractère mais :

    $table->boolean('vip')->default(0);

    ou

    $table->boolean('vip')->default(false);
  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    C'est bon j'ai finalement réussit, dernière petite question. Comment faire avec "migrate" pour ajouter une case qui n'y était pas précédemment? Actuellement je supprime ma base de donnée et refait la commande à chaque changement..
    Je ne veux pas supprimer les données, uniquement créer de nouvelles colonne

  • Avatar de Devonab
    Membre depuis :
    12/02/2016
    Messages :
    23

    Tu peux refaire un nouveau fichier de migration avec comme contenu :

    public function up()
    {
    Schema::table('users', function($table)
    {
    $table->boolean('vip')->default(0)->change();
    });
    };

    Attention qu'il te faudra un nouveau package : doctrine/dbal, qu'il te faut ajouter dans ton composer.json (voir la documentation ici)

  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    Niquel merci, et un dernier point (je vais m'arrêter ici :p)

    J'ai pas trouver dans la doc, mais comment je fait un IF pour savoir si l'utilisateurs est admin.
    Ce qui est tout simple en php mais je n'arrive pas avec laravel

    Je veux récupérer la valeur de vip
    et faire un

    if(userinfo{'vip') == 1{
    }

    Comment faire ceci avec laravel svp?

  • Avatar de Devonab
    Membre depuis :
    12/02/2016
    Messages :
    23

    Tu veux bloquer une/des page(s) si l'utilisateur n'est pas VIP ?
    Si c'est le cas, tu peux créer un nouveau middleware :

    php artisan make:middleware CheckVip

    avec comme contenu :

    class CheckVip
    {
    public function handle($request, Closure $next)
    {
    if (Auth::user() && Auth::user()->vip === 1) {
    return $next($request);
    }

    abort(403, 'Vous n\'avez pas le rang nécessaire pour voir cette page !');
    }
    }

    Tu dois ensuite enregistrer le middleware dans le kernel (app/Http/Kernel.php) dans le tableau $routeMiddleware :

    'checkVip' => \App\Http\Middleware\CheckVip::class,

    Une fois ceci fait, tu n'as plus qu'à attribuer le middleware aux routes que tu désires :

    Route::group(['middleware' => ['checkVip']], function () {
    //Les routes vers les pages protégées
    });
  • Avatar de WaDiTrickshot
    Membre depuis :
    09/10/2017
    Messages :
    6

    Oula c'est compliquer :p

  • Avatar de Devonab
    Membre depuis :
    12/02/2016
    Messages :
    23

    Tout dépends de ce que tu veux faire.
    Un middleware permet de filtrer les requêtes. Le middleware Auth qui existe de base avec l'authentification de Laravel sert à vérifier que l'utilisateur est connecté. Si oui, il peut accéder à la requêtes, sinon, il est redirigé vers la page de connexion. Tu peux aller consulter la documentation officielle voir même les cours de Bestmomo et la partie qui s'y réfère : http://laravel.sillo.org/cours-laravel-5-5-les-bases-formulaires-et-middlewares/

    Après, il y a plusieurs façons. Si tu n'as pas envie de passer par un middleware car tu ne dois faire la vérification que sur une route, tu peux éventuellement utiliser un controller et faire la vérification à l'intérieur :

    public function index()
    {
    // Si l'utilisateur est connecté et qu'il a le boolean à true, on renvoie la page
    if(Auth::check() && Auth::user()->vip === 1)
    return view('home');
    }
    abort(403, 'Désolé vous n\'avez pas le rang nécessaire pour afficher cette page.')
    }

Vous ne pouvez pas répondre à ce sujet.