Membuat Form dan Proses Registrasi Laravel 5.3


Hampir sama dengan cara yang digunakan pada login dan logout di artikel sebelumnya. Fitur registrasi sudah tersedia dalam bundle Auth. Tanpa harus membuatnya dari awal (lagi), cukup memodifikasi fitur registrasi tersebut sesuai dengan kebutuhan aplikasi.

Topik bahasan kali ini mencakup:

  • Memahami registrasi bawaan Laravel
  • Fitur tambahan saat registrasi
  • Memodifikasi fitur registrasi

Memahami Registrasi

Jika kita menjalankan aplikasi Laravel dan menjalankan URI /register melalui peramban (browser), kita akan dihadapkan pada formulir pendaftaran. Jika diisi dan valid, maka data tersebut akan diisimpan ke dalam basisdata untuk kemudian otomatis login dan diarahkan ke halaman /home.

Form Registrasi

Form Registrasi

Untuk memahami dari sisi skrip, kita bisa buka berkas app/Http/Contollers/Auth/RegisterController.php. Ada dua method yang menjadi sorotan, yaitu validator() dan create().

Dalam method validator() kita bisa mendefinisikan data yang akan divalidasi yang bersumber dari form.

Sedangkan pada method create(), didefinisikan data apa saja yang akan disimpan ke dalam tabel user. Sebelum menambahkan array asosiatif pada nilai kembalinya, pastikan field sudah tersedia pada tabel, baik dibuat secara manual maupun menggunakan Migrations.

Lantas, proses simpan datanya ada di mana? Bisa dilihat pada berkas vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php. Hal ini dapat diketahui dari trait yang digunakan pada RegisterController.php, salah satunya adalah RegistersUser.

Isi lengkap dari berkas tersebut adalah sebagai berikut.

<?php
 
namespace Illuminate\Foundation\Auth;
 
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Auth\Events\Registered;
 
trait RegistersUsers
{
    use RedirectsUsers;
 
    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        return view('auth.register');
    }
 
    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();
 
        event(new Registered($user = $this->create($request->all())));
 
        $this->guard()->login($user);
 
        return redirect($this->redirectPath());
    }
 
    /**
     * Get the guard to be used during registration.
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard();
    }
}

Ada tiga method yang tersedia dalam trait RegistersUser, showRegistrationForm(), guard(), dan register(). Di method register() inilah proses penyimpanan data terjadi.

Dari rangkaian struktur skripnya bisa dipahami kalau data divalidasi terlebih dahulu, kemudian menyimpannya ke dalam basisdata dan login secara otomatis untuk kemudian diarahkan ke halaman /home.

Menambahkan Fitur Baru

Ada dua hal yang ingin ditambahkan pada saat registrasi berhasil, ialah proses konfirmasi melalui email dan Log.

Alurnya, ketika user sudah terdaftar dalam basisdata, maka sistem otomatis mengirim email konfirmasi bahwa pendaftaran berhasil, kemudian menyimpan Log untuk informasi untuk developer.

Memodifikasi Fitur Registrasi

Bukan langkah bijak apabila kita mengubah langsung proses register pada berkas RegistersUser.php. Apabila terjadi pembaruan framework, maka berkas yang kita ubah akan ditimpa dengan berkas baru dari repositori Laravel.

Traits are a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.

Karena merupakan trait, akan lebih baik membuat method yang sama (menyalin) dan menambahkannya pada class RegisterController.

Skrip lengakapnya dapat dilihat pada contoh di bawah.

<?php
 
namespace App\Http\Controllers\Auth;
 
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Auth\Events\Registered;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Http\Request;
use Validator;
 
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 login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';
 
    /**
     * 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|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }
 
    /**
     * Create a new user instance after a valid registration.
     *
     * @param array $data
     *
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
 
    /**
     * Handle a registration request for the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function register(Request $request)
    {
        $this->validator($request->all())->validate();
 
        event(new Registered($user = $this->create($request->all())));
 
        // send email to registered user
        \Mail::send('email.user.register', compact('user'), function ($message) use ($user) {
            $mail->to($user->email, $user->name)
                ->from('mail@laravel.web.id', 'Laravel.web.id')
                ->subject('Pedaftaran Berhasil');
        });
 
        // log
        \Log::debug('New user has been registered.', ['email' => $user->email]);
 
        $this->guard()->login($user);
 
        return redirect($this->redirectPath());
    }
}

Perlu diperhatikan, tak hanya menambahkan method logout() beserta isinya, tapi juga ditambahkan class lain yang digunakan trait RegistersUser, yaitu Illuminate\Auth\Events\Registered (event) dan Illuminate\Http\Request (facade).

 

Tak Berkategori

Yugo Purwanto

Pemrogram PHP dan JavaScript yang sedang sibuk mengembangkan aplikasi Glosarium Bahasa Indonesia.

Tinggalkan Balasan