1. Laravel
  2. PHP

Memodifikasi Halaman Register Laravel

This entry is part 3 of 6 in the series Laravel Authentication

Ketika menggunakan Laravel authentication scaffold yang merupakan template standar yang disediakan oleh Laravel, tentu saja kita harus menyesuaikan dengan kebutuhan pada project kita, oleh karena itu pada artikel ini kita akan membahas bagaimana memodifikasi halaman register pada Laravel.

Menambahkan field baru pada halaman register

Untuk menambahkan field baru pada halaman register, kita hanya perlu merubah halaman view register (resources/views/auth/register.blade.php)

Sebagai contoh, kita akan menambahkan field username pada saat pengguna mendaftar pada project kita.

Database Migration

Pertama, kita harus menambahkan field username terlebih dahulu pada table users.

php artisan make:migration add_username_to_users --table=users

Perintah diatas akan membuat file migration baru pada directory database/migrations. Selanjutnya ubah seperti kode berikut ini untuk menambahkan field username pada table users.

<?php

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

class AddUsernameToUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('username')->unique();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('username');
        });
    }
}

Kemudian jalankan perintah migrate untuk mengeksekusi migrations.

php artisan migrate

Setelah menjalankan perintah diatas, kita akan memiliki field username pada table users.

Laravel users table

View register

Tambah kode dibawah ini untuk menambahkan input username pada halaman register.

<div class="form-group row">
    <label for="username" class="col-md-4 col-form-label text-md-right">
        {{ __('Username') }}
    </label>

    <div class="col-md-6">
        <input id="username" type="text" class="form-control @error('username') is-invalid @enderror" name="username" value="{{ old('username') }}" required autocomplete="username" autofocus>

        @error('username')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>

Setelah menambahkan kode diatas, halaman registrasi pada project kita akan terlihat seperti ini.

Laravel register username field

Register Controller

Setelah menambahkan field username pada halaman register, langkah selanjutnya adalah update controller Register untuk memvalidasi input dan menyimpan input ke database.

<?php

namespace App\Http\Controllers\Auth;

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

class RegisterController extends Controller
{
    //

    /**
     * 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'],
            'username' => ['required', 'string', 'unique:users', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

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

Silahkan sesuaikan validasi field sesuai dengan kebutuhan project anda.

Model User

Langkah terakhir yaitu merubah model User dengan menambahkan username pada property fillable / mass assignment.

<?php

namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable implements MustVerifyEmail
{
    //

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

   //
}

Menambahkan data untuk field baru

Pada saat memodifikasi halaman register pada Laravel, terkadang kita juga perlu untuk menambahkan field baru yang mana datanya mengambil dari source lain, misalnya database. Untuk kasus ini, kita perlu merubah controller untuk register dengan mengirimkan data ke view register.

Register Controller

Langkah pertama, kita harus update RegisterController class (app/Http/Controllers/Auth/RegisterController.php) dengan menambahkan data yang harus kita kirim ke view.

Sebagai contoh, kita perlu menambahkan field negara pada saat user registrasi. Jika anda perlu untuk mengambil data dari database, silahkan sesuaikan dengan data yang diperlukan.

<?php

namespace App\Http\Controllers\Auth;

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

class RegisterController extends Controller
{
    //

    /**
     * Show the application registration form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showRegistrationForm()
    {
        return view('auth.register', [
            'countries' => ['Indonesia', 'Australia']
        ]);
    }

    //
}

Pada contoh diatas, kita mengirimkan data country ke view register, sehingga kita bisa menampilkan daftar negara pada view register. Selanjutnya, ubah view register (resources/views/auth/register.blade.php) dengan menambahkan input baru.

<div class="form-group row">
    <label for="country" class="col-md-4 col-form-label text-md-right">
        {{ __('Country') }}
    </label>

    <div class="col-md-6">
        <select name="country" id="country" class="form-control">
            @foreach ($countries as $country)
                <option value="{{ $country }}">
                    {{ $country }}
                </option>
            @endforeach
        </select>

        @error('country')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>

Setelah menambahkan field country pada view register, halaman register project kita akan terlihat seperti ini:

Laravel register with country data

Sama seperti menambahkan username yang telah dibahas sebelumnya, kita juga harus memodifikasi controller Register dan model User untuk bisa menyimpan data country ke database.

Series Navigation<< Menambahkan email verification LaravelMemodifikasi proses Login Laravel >>
Comments to: Memodifikasi Halaman Register Laravel

    Your email address will not be published. Required fields are marked *

    Attach images - Only PNG, JPG, JPEG and GIF are supported.