Kali ini kita akan belajar membuat cms dengan menggunakan framework laravel. Pada saat kami membuat projek ini, versi laravel sudah pada versi 9.0. Sehinga pada projek kali ini saya menggunakan versi laravel yang terbaru untuk Tutorial Belajar Bikin CMS Dengan laravel 9 kali ini.

Contents

Persiapan Yang harus di lakukkan

1. Install Webserver ( XAMPP )
2. Visual Studio Code
3. Install Composer

Pembuatan Projek

Untuk membuat sebuah projek dengan laravel, silahkan gunakan perintah di bawah ini dengan menggunakan vscode terminal atau bisa menggunakan command promt / terminal . Kali ini projek akan di berinama RiffaCMS

composer create-project laravel/laravel RiffaCMS

Setelah anda mengetikan perintah itu, maka akan secara otomatis laravel membuatkan sebuah projek untuk anda dengan folder RiffaCMS, dan didalamnya sudah terdapat file2 laravel yang siap kita kerjakan. Perintah selanjutnya adalah silahkan teman teman masuk dalam folder tersebut dengan perintah

 cd RiffaCMS

Setelah anda masuk dalam folder projek silahkan jalankan server dengan mengetikan

 php artisan serve 

Maka server laravel akan berjalan dengan port tertentu. Silahkan buka url yang di tampilkan dalam terminal, jika url tersebut bisa di akses, maka instalasi laravel teman teman semua sudah berhasil

Pembuat Sistem Login

Kali ini kita akan bahas tentang sistem login nya. Mulai dari database, tampilan dan juga sistem autentikasinya. Mari kita langsung saja kita bahas mulai dari tampilan/layout.

Pembuatan Tampilan

Untuk membuat sistem login , kita akan membuat sebuah modul bernama ui. Untuk menginstallnya silahkan teman teman mengetikan perintah dibawah ini

composer require laravel/ui 

Setelah itu kita install auth yang ada di dalam ui dengan perintah

 php artisan ui --auth 

Atau bisa dengan menambahkan bootstrap jika teman teman ingin langsung memberikan style dengan bootsrap yang sudah disediakan ui

php artisan ui bootstrap --auth 

Kali ini kita akan menggunakan yang kedua ( menggunakan bootsrap). Dan jika menggunakan boostrap rekan rekan harus menginstall nodejs , karena kita akan menjalankan peintah node js dengan perintah dibawah ini.

npm install

Kemudian dilanjutkan dengan

npm run dev

Pembuatan Database

Silahkan teman teman semua persiapkan databasenya. kali ini kita akan menggunakan mysql, jadi silahkan teman teman semuanya buka di “http://localhost/phpmyadmin/” jika menggunakan xampp seperti saya. Dan silahkan bikin database, dan juga user besarta passwordnya. Setelah itu silhakn masuk di file .env untuk pengaturan database. Atur DB_DATABASE , DB_USERNAME dan DB_PASSWORD sesuai dengan yang teman teman bikin di php myadmin

Sekarang kita coba membuat sebuah table dan kita coba untuk mengisi table user tersebut untuk default user.

Tambahkan field user  yang letaknya di database/migrations/…_create_users_table.php
Silahkan tambahkan

$table- > string('username')- > unique();

Sehingga seluruh field seharusnya menjadi seperti ini

$table- > id();
$table- > string('username')- > unique();
$table- > string('name');
$table- > string('email')- > unique();
$table- > timestamp('email_verified_at')- > nullable();
$table- > string('password');
$table- > rememberToken();
$table- > timestamps();

Setelah itu ketikan perintah

 php artisan migrate 

Dengan perintah tersebut maka akan terbentuk sebuah table , dan diantaranya adalah table user.

Setup File

Setelah database terbentuk,kita kan mengkonfigurasi file untuk menambahkan field user, karena tadi kita menambahkan user pada table.

Tambahkan pengaturan user  yang letaknya di  \app\Http\Controllers\Auth\RegisterController.php
Pada Fungsi validator tambahkan

'username' => ['required', 'string', 'max:255', 'unique:users'],

Pada fungsi Create tambahkan juga

'username' => $data['username'],

Kemudian di  \app\Models\User.php tambahkan field user

protected $fillable = [
'username',
'name',
'email',
'password',
];

Tambahkan field untuk usernya di  \resources\views\auth\register.blade.php

<div class="row mb-3">
	<label for="username" class="col-md-4 col-form-label text-md-end">{{ __('User') }}< / 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 itu lakukan register melalui form yang di sediakan oleh laravel ui. Setelah anda memiliki user, anda bisa disable user dengan menambahkan configurasi pada file  \web.php dan edit untuk Auto::routes nya menjadi

Auth::routes([
    'register' = > false
]);

Agar bisa login dengan username, maka kita juga perlu mengubah file \resources\views\auth\login.blade.php . Setelah itu ganti email menjadi username.

<div class="row mb-3">
	<label for="username" class="col-md-4 col-form-label text-md-end">{{ __('Email Address / username ') }}< / label>

	<div class="col-md-6">
		<input id="username" type="username" 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 selesai mengedit file diatas, maka silahkan tambahkan method username pada file \app\Http\Controllers\Auth\LoginController.php .
Code dari method username bisa anda lihat di bawah ini

public function username()
{
	return 'username';
}

Setelah itu jalankan server laravel anda dengan php artisan serve , dan coba login dengan username. Maka jika berhasil , maka anda sudah selesai merubah metode login dengan email menjadi username.
Kemudian bagaiman jika anda ingin menggunakan login dengan kedua duanya. Atau anda bisa login dengan username maupun dengan email?. Silahkan ganti method username menjadi 2 method berikut ini


protected function sendFailedLoginResponse(Request $request)
{
	throw ValidationException::withMessages([
		'username' => [trans('auth.failed')],
	]);
}

public function username()
{
	$login = request()->input('username');
	$field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
	request()->merge([$field => $login]);
	return $field;
}