Bonjour,

Voila,je rencontre un petit problème avec mon code.

J'essaie de donner un ou plusieurs rôle à mon utilisateur lors de son enregistrement. J'ai crée le système de login/register avec un coup de artisan make:auth. Ensuite j'ai créé les modèles et rôles. Lorsque j'assigne un rôle à un utilisateur existant avec tinker, ça fonctionne correctement mais lorsque je créé un utilisateur et que je lui assigne un rôle via une checkbox, l'utilisateur est bien crée mais il n'a aucun rôle.

RegistrationController.php :

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Role;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'role' => $data['role']
        ]);

        dd($roleValue = $user->role);

        if($roleValue == 'senior')

        $userRole = Role::Where('name','senior')->first();

        if($roleValue == 'prestataire')

            $userRole = Role::Where('name','presta')->first();

        $user->roles()->attach($userRole);

        return $user;
    }
}
Entourez votre code pour bien le mettre en forme
``
une partie du formulaire
                    </div>

                    <input type="checkbox" id ="role" name="role[]" value="senior">Je m'inscris en tant que sénior, je recherche un service<br>
                    <input type="checkbox" id ="role" name="role[]" value="prestataire" checked> Je m'inscris en tant que prestataire,je propose mes services<br>
                        </div>
                    </div>
                    ```
<?php

namespace App;

use App\Permissions\HasPermissionsTrait;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable, HasPermissionsTrait;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function annonces()
    {

        return $this->hasMany(Annonce::class);
    }

        public function roles()
    {
        return $this->belongsToMany(Role::class, 'users_roles');
    }
}

comment assigner un ou plusieurs rôles à l'utilisateur avec les checkbox?

Lorque je dd($roleValue = $user->role);,
dans le registercontroller.php, j'obtiens null.

1 réponse


Salut
$roles et un array de tes ID correspondants au role selectionner via ton formulaire
Tu peux ensuite faire un $user->roles()->sync($roles)