Laravel Data Input


Pada blog ini, kita akan menerapkan bagaimana cara manipulasi data dengan menggunakan Laravel

View on GitHub

Disclaimer!

Praktikum ini dibangun dengan blog sebelumnya oleh karena itu disarankan untuk mengikuti blog sebelum melanjutkannya

Link Blog

Penyusunan User Controller

Kesimpulan

Selanjtnya membuat fitur manajemen users, kita akan menggunakan fungsi keseluruhan CRUD maka kita akan membuat controller resource , buka terminal/CMD kemudian ketikkan perintah berikut

php artisan make:controller UserController -–resource

Ubah kode routing menjadi seperti di bawah

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\UserController;

Route::get('/', function () {
    return view('home');
});




Auth::routes();

Route::resource('users', UserController::class);
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

Setelah itu, susun user controller seperti di bawah ini

<?php

namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $users = User::all();
        return view('users.index', ['users' => $users]);
    }


    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        return view('users.create');
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $user = new \App\Models\User;
        $user->name = $request->get('nama');
        $user->username = $request->get('username');
        $user->email = $request->get('email');
        $user->password = Hash::make($request->get('password'));
        $user->level = json_encode($request->get('level'));
        $user->save();
        return redirect()->route('users.index')->with('status', 'user baru
berhasil ditambahkan');
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit($id)
    {
        $user = User::findOrFail($id);
        return view('users.edit', ['user' => $user]);
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, $id)
    {
        $user = \App\Models\User::findOrFail($id);
        $user->name = $request->get('nama');
        $user->level = json_encode($request->get('level'));
        $user->save();
        return redirect()->route('users.index', [$id])->with(
            'status',
            'User berhasil diubah'
        );
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy($id)
    {
        $user = \App\Models\User::findOrFail($id);
        $user->delete();
        return redirect()->route('users.index')->with('status', 'User
berhasil dihapus');
    }
}

Fungsi dari Kelas UserController

Fungsi ini akan mengembalikan view users.index. Buat file baru yang bernama "users/index.blade.php dan isi view tersebut (caranya akan ditampilkan)
Rute ini menggunakan path users/create/{user} mengembalikan view users/create.blade.php sehingga akan dibuat tabel tersebut
Form create user menggunakan method POST yang akan dikirimkan ke action store dengan route users.store, selanjutnya pada action store akan ditangkap isi form create user dengan cara $request->get(‘nama input’) kemudian disimpan pada table user dengan cara instance model User dengan cara $user = new \App\Models\User setelah itu assign sesuai dengan nama field. Untuk menyimpan kedalam database User menggunakan perintah $user->save, jika data berhasil disimpan akan di redirect ke route users.index dengan mebawa session status.
Selanjutnya setelah fungsi create selesai kita akan menampilkan data user, untuk menampilkan data user kita akan menggunakan method GET yaiitu http://localhost/users yang mana route ini merupakan action index pada UserController
Fungsi ini akan mengembalikan views dari users.update dengan rute users/edit/{users}
Mlakukan proses update data user terlebih dahulu kita buatkan tombol action yang mengarahkan pada route users/edit/{user}/edit atau action edit pada UserController untuk menamilkan form dan menggunakan route users/edit/{user} untuk method PUT. Setelah itu user yang ada diubah akan disimpan ke database dengan menggunakan fungsi save() dan dapat mengambil status update tersebut.
Menghapus data user dengan indeks yang telah ditentukan.

Penyusunan Views

Pertama-tama, buat folder users untuk menampung seluruh view yang terkait dengan pengguna. Setelah itu buat file create.blade.php, edit.blade.php dan index.blade.php

@extends('layouts.main')
@section('judul')
    Users
@endsection
@section('konten')
    @if (session('status'))
        <div class="alert alert-success">
            {{ session('status') }}
        </div>
    @endif
    <div class="card shadow mb-4">
        <a href="{{ route('users.create') }}" class="btn btn-primary btnsm">Tambah User</a>
        <div class="card-header py-3">
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
                    <thead>
                        <tr>
                            <th><b>Name</b></th>
                            <th><b>Username</b></th>
                            <th><b>Email</b></th>
                            <th><b>Action</b></th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach ($users as $user)
                            <tr>
                                <td>{{ $user->name }}</td>
                                <td>{{ $user->username }}</td>
                                <td>{{ $user->email }}</td>
                                <td>
                                    <a href="{{ route('users.edit', $user->id) }}" class="btn btn-sm btn-success">Edit</a>
                                    <form onsubmit="return confirm('Hapus data user ?')" class="d-inline"
                                        action="{{ route('users.destroy', [$user->id]) }}" method="POST">
                                        @csrf
                                        <input type="hidden" name="_method" value="DELETE">
                                        <input type="submit" value="Hapus" class="btn btn-danger btn-sm">
                                    </form>
                                </td>
                            </tr>
                        @endforeach
                    </tbody>
                </table>
            </div>
        </div>
    </div>
@endsection
Card image cap

View ini akan menampilkan seluruh user di aplikasi. Terdapat fungsi membuat user dengan memanggil fungsi create, fungsi hapus dan delete pada setiap baris pengguna yang ada dipanggil di UserController. Tampilannya seperti

@extends('layouts.main')
@section('judul')
    Create User
@endsection
@section('konten')
    <div class="card shadow mb-4">
        <div class="card-header py-3">
        </div>
        <div class="card-body">
            <div class="row">
                <div class="col-lg-9">
                    <form method="POST" action="{{ route('users.store') }}">
                        @csrf
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Nama</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="nama" name="nama">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Email</label>
                            <div class="col-sm-9">
                                <input type="email" class="form-control" id="email" name="email">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Username</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="username" name="username">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Password</label>
                            <div class="col-sm-2">
                                <input type="password" class="form-control" id="password" name="password">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Level</label>
                            <div class="col-sm-4 mr-2">
                                <select class="form-control select2-multiple" name="level[]" multiple="multiple">
                                    <option value="ADMIN">ADMIN</option>
                                    <option value="GURU">GURU</option>
                                    <option value="STAFF">STAFF</option>
                                </select>
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-sm-10 text-center">
                                <button type="reset" class="btn btn-warning btnsm">Batal</button>
                                <button type="submit" class="btn btn-primary btnsm">Simpan</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
@endsection

View ini bertanggung jawab untuk membuat user dengan form nama, username, password, dan level dari user. Tampilannya seperti

Card image cap Card image cap
@extends('layouts.main')
@section('judul')
    Edit User
@endsection
@section('konten')
    <div class="card shadow mb-4">
        <div class="card-header py-3">
        </div>
        <div class="card-body">
            <div class="row">
                <div class="col-lg-9">
                    <form method="POST" action="{{ route('users.update', [$user->id]) }}">
                        <input type="hidden" name="_method" value="PUT">
                        @csrf
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Nama</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="nama" name="nama"
                                    value="{{ $user->name }}">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Email</label>
                            <div class="col-sm-9">
                                <input type="email" class="form-control" id="email" name="email"
                                    value="{{ $user->email }}">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Username</label>
                            <div class="col-sm-9">
                                <input type="text" class="form-control" id="username" name="username"
                                    value="{{ $user->username }}">
                            </div>
                        </div>
                        <div class="form-group row">
                            <label class="col-sm-3 col-form-label textcenter">Level</label>
                            <div class="col-sm-4 mr-2">
                                <select class="form-control select2-multiple" name="level[]" multiple="multiple">
                                    <option value="ADMIN"
                                        {{ in_array('ADMIN', json_decode($user->level)) ? 'selected' : '' }}>ADMIN</option>
                                    <option value="GURU"
                                        {{ in_array('GURU', json_decode($user->level)) ? 'selected' : '' }}>GURU</option>
                                    <option value="STAFF"
                                        {{ in_array('STAFF', json_decode($user->level)) ? 'selected' : '' }}>STAFF</option>
                                </select>
                            </div>
                        </div>
                        <div class="form-group row">
                            <div class="col-sm-10 text-center">
                                <a href="{{ route('users.index') }}" class="btn
btn-warning btn-sm">Batal</a>
                                <button type="submit" class="btn btn-primary btnsm">Simpan</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
@endsection
Card image cap Card image cap

View ini bertanggung jawab untuk memodifikasi user yang telah ada. Tampilannya seperti

Kesimpulan

Controller digunakan untuk menjalankan fungsi-fungsi yang dijalankan oleh suatu rute.

Document