web-dev-qa-db-fra.com

Comment envoyer du courrier après Laravel 5 inscription par défaut?

Je suis noob en Laravel et je travaille avec Laravel 5. Pour l'enregistrement et la connexion des utilisateurs, je veux utiliser le système par défaut de laravel. Mais, il faut étendez-le avec deux fonctionnalités suivantes:

  1. L'utilisateur recevra un e-mail juste après son inscription.
  2. Lors de l'enregistrement de l'enregistrement de l'utilisateur, je dois faire une entrée dans une autre table de rôles (j'ai utilisé le package Entrust pour la gestion des rôles)

Comment faire ces choses?

16
Sovon

Vous pouvez modifier Laravel 5 registraire par défaut situé dans l'application/les services

<?php namespace App\Services;

    use App\User;
    use Validator;
    use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
    use Mail;

    class Registrar implements RegistrarContract {

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

        /**
         * Create a new user instance after a valid registration.
         *
         * @param  array  $data
         * @return User
         */
        public function create(array $data)
        {
            $user = User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => \Hash::make($data['password']),
                //generates a random string that is 20 characters long
                'verification_code' => str_random(20)
            ]);

//do your role stuffs here

            //send verification mail to user
            //---------------------------------------------------------
            $data['verification_code']  = $user->verification_code;

            Mail::send('emails.welcome', $data, function($message) use ($data)
            {
                $message->from('[email protected]', "Site name");
                $message->subject("Welcome to site name");
                $message->to($data['email']);
            });


            return $user;
        }

    }

À l'intérieur resources/emails/welcome.blade.php

Hey {{$name}}, Welcome to our website. <br>
Please click <a href="{!! url('/verify', ['code'=>$verification_code]) !!}"> Here</a> to confirm email

NB: Vous devez créer une route/un contrôleur pour vérifier

28
Emeka Mbah

Laravel a une méthode vide nommée enregistré dans Illuminate\Foundation\Auth\RegistersUsers trait pour simplifier cette opération, il suffit de la remplacer comme suit:

Ajoutez d'abord une nouvelle notification:

<?php

namespace App\Notifications;

use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class UserRegisteredNotification extends Notification {

    public function __construct($user) {
        $this->user = $user;
    }

    public function via($notifiable) {
        return ['mail'];
    }

    public function toMail($notifiable) {
        return (new MailMessage)
            ->success()
            ->subject('Welcome')
            ->line('Dear ' . $this->user->name . ', we are happy to see you here.')
            ->action('Go to site', url('/'))
            ->line('Please tell your friends about us.');
    }

}

Ajoutez cette ligne se à votre RegisterController.php:

use App\Notifications\UserRegisteredNotification;

et ajoutez cette méthode:

protected function registered(Request $request, $user) {
    $user->notify(new UserRegisteredNotification($user));
}

Vous avez terminé.

11
Sinan Eldem