Tutorial Laravel: CREATE DATA WITH DB FACADE

Assalamualaikum Semua






      Hallo semua selamat datang kembali. Saya Muhammad Aslam atau panggil saja Mas Lam akan berbagi pengetahuan tentang framework khususnya laravel langsung saja tanpa banyak basa basi lagi yu urang belajar framework

Disini kita melanjutkan tutorial sebelumnya
langsung saja Buka file resources/views/belajar.blade.php, tambahkan link menuju form add
tambahkan code dibawah :
<a href="{{ url('siswa/create') }}" class="btn btn-dark mt-5">Tambah data</a>

url

URL digunakan untuk menciptakan URL menuju url tertentu. URL
yang diciptakan akan ditambahkan base_url dari project anda.

Misal: url(‘/siswa/create’), maka yang akan muncul di HTML nya
adalah http://localhost/laravel5.7-fresh/public/belajar/create

Buka file routes/web.php, tambahkan route create  tambahkan code dibawah ini:

Route::get('/siswa/create','SiswaController@create');

perintah ini akan mengarahkan route /siswa/create ke function create pada controller SiswaController

Buka file app/Http/Controllers/SiswaController.php masukan kode berikut

public function create()
    {
    return view('siswa.form');
    }

ini berfungsi untuk Menampilkan view dengan nama form yang terdapat pada folder siswa

Buat file resources/views/siswa/form.blade.php tambahkan kode berikut

<form action="{{url('/siswa')}}" method="POST">
     @csrf
     <div class="container">
      <h3>Data Siswa</h3>
      <div class="row">
         <div class="col-md-12">
          <strong>NIS :</strong>
          <input type="text" name="nis" class="form-control" placeholder="NIS" value="{{ old('nis') }}">
       </div>
        <div class="col-md-12">
          <strong>Nama Siswa :</strong>
          <input type="text" name="nama_lengkap" class="form-control" placeholder="Nama Siswa" value="{{ old('nama_lengkap') }}">
        </div>
        <div class="col-md-12">
          <strong>Golongan Darah :</strong><br>
          <select name="goldar"class="form-control" >
           <option value="">- Pilih Goldar -</option>
           <option value="A" {{ old('goldar') == 1 ? 'selected' : '' }}>A</option>
           <option value="B" {{ old('goldar') == 2 ? 'selected' : '' }}>B</option>
           <option value="O" {{ old('goldar') == 3 ? 'selected' : '' }}>O</option>
           <option value="AB" {{ old('goldar') == 4 ? 'selected' : '' }}>AB</option>
          </select>
        </div>
        <div class="col-md-12">
     <b><label for="jenkel">Jenis Kelamin :</label></b>
     <div class="radio">
         <label>
             <input type="radio" name="jenkel" id="L" value="L" @if(old('jenkel')) checked @endif>
             Laki-laki
         </label>
     </div>
     <div class="radio">
         <label>
             <input type="radio" name="jenkel" id="P" value="P" @if(!old('jenkel')) checked @endif>
             Perempuan
         </label>
     </div>
</div>
        <div class="col-md-12">
          <button type="submit" class="btn btn-block btn-primary" value="Simpan">Submit</button>
          <a href="{{url('/siswa')}}" class="btn btn-block btn-danger">Back</a>
        </div>
      </div>
    </form>
  </div>
@endsection

PENJELASAN @CSRF

csrf_token()
Digunakan untuk membuat csrf token

csrf_field()
Digunakan untuk membuat input hidden _token beserta token nya

<input type=“hidden” name=“_token” value=“xxxxxxxxx”

@csrf
Fitur dari blade, sama dengan csrf_field, namun tidak perlu
menggunakan bracket ( {{ }} ) untuk menampilkannya di HTML.

@csrf

Setiap request yang memiliki method selain GET (POST, PUT,
PATCH, DELETE), syntax diatas wajib digunakan didalam form
sebagai fungsi keamanan dari serangan CSRF.

CSRF (Cross-Site Request Forgery) merupakan bentuk eksploitasi
website yang dieksekusi atas wewenang korban, tanpa dikehendakinya.
CSRF menipu web site melalui request dari user yang dipercaya.
Serangan bekerja melalui link atau script pada halaman site yang
diakses user.

Buka file routes/web.php, tambahkan route post

Route::post('/siswa','SiswaController@store');
Buka file app/Http/Controllers/SiswaController.php, tambahkan fungsi store
public function store(Request $request)
    {$input = $request->all();
    unset($input['_token']);
    $status = \DB::table('t_siswa')->insert($input);

    if ($status) {
    return redirect('/belajar')->with('success','Data berhasil ditambahkan');
    }else{
    return redirect('/siswa/create')->with('error','Data gagal ditambahkan');
    }
    }

MENAMPILKAN FEEDBACK PESAN SUKSES/ERROR

Buka file resources/views/belajar.blade.php

@if(session('success'))
<div class="alert alert-success alert-dismissable fade show">
{{ session('success') }}
<button class="close" type="button" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
@endif
@if(session('error'))
<div class="alert alert-error">
{{ session('error') }}
</div>
@endif

PENJELASAN @IF dan @ENDIF

@if
Digunakan untuk menampilkan suatu bagian pada HTML ketika
kondisi pada PHP terpenuhi

@if(session(‘success’))
Pada contoh diatas, tampilkan div dengan class success jika
session(‘success’) tidak kosong. Div tersebut berisikan data/pesan
yang ada pada session(‘success’) tersebut

Perhatikan penempatan blok @endif

VALIDASI INPUT

Validasi Input Menggunakan Validation

Untuk melakukan validasi input agar sesuai dengan yang diharapkan,
Laravel sudah menyediakan fiturnya yaitu dengan menggunakan
Facades Validator atau function validate.

Buka file app/Http/Controllers/SiswaController.php, tambahkan code di fungsi store
$rule = [
    'nis' => 'required|numeric',
    'nama_lengkap' => 'required|string',
    'jenkel' => 'required',
    'goldar' => 'required'
    ];
    $this->validate($request,$rule);

Cara menulis rule adalah dengan membuat array asosiatif yang didalamnya berisi key yang berupa nama field yang ada pada form dan value yang berisi string valiadasinya.

validasi lebih dari 2 rule dan validasi ber parameter
Jika terdapat lebih dari 2 validasi, gunakan simbol |

Jika string validasi memerlukan parameter, gunakan simbol titik dua :

Contoh Array Asosiatif untuk Validasi NIS:

‘nis’ => ‘max:10’

Artinya: Validasi NIS hanya boleh memiliki panjang maksimal 10 karakter

Sama dengan if pada percobaan sebelumnya, if disini artinya menampilkan error dari
validasi jika variabel $errors lebih dari 1

Variabel $errors berasal dari hasil validasi pada sintaks di Controller =>
$this->validate()

STUDI KASUS 1

Lakukan hal yang sama seperti yang sudah dijelaskan pada slide
sebelumnya untuk tabel t_kelas. Buatlah tampilan form untuk
menambahkan data kelas.

Implementasikan validasi untuk tabel t_kelas, cobalah beberapa validasi
yang berbeda selain yang sudah dijelaskan (tidak boleh validasi
numeric, string dan max)

1. tambahkan routernya

Route::get('/kelas/create','KelasController@create');

2. isi kelas.blade seperti ini


@extends('layouts.app')
@section('content')
<!--ALERT-->
<div class="container">
  <div class="row">
      @if(session('success'))
      <div class="alert alert-success">
          {{ session ('success') }}
      </div>
      @endif
      @if(session('error'))
      <div class="alert alert-error">
          {{ session ('error') }}
      </div>
      @endif
    </div>
  </div>

  <div class="container">
    <div class="row">
      <div class="col-md-10">
        <h3>Data Kelas</h3>
      </div>
       <div class="col-sm-2">
        <a class="btn btn-sm btn-success" href="{{ url('/kelas/create') }}">Tambah Data</a>
      </div>
    <table class="table table-bordered table-hover">
      <tr>
        <th width = "50px"><b>No.</b></th>
        <th width = "100px">Kelas</th>
        <th width = "300px">Jurusan</th>
        <th width = "100px">Ruangan</th>
        <th width = "300px">Wali Kelas</th>
        <!--<th width = "200px">Option</th>-->
      </tr>
      @foreach ($kelas as $kelad)
        <tr>
          <td>{{ isset($i) ? ++$i : $i = 1 }}</td>
          <td>{{$kelad->nama_kelas}}</td>
          <td>{{$kelad->jurusan}}</td>
          <td>{{$kelad->lokasi_ruangan}}</td>
          <td>{{$kelad->nama_wali_kelas}}</td>
          <!--<td colspan="3" rowspan="" headers="">
            <a class="btn btn-sm btn-warning">Edit</a>
            <a class="btn btn-sm btn-danger">Hapus</a>
            <a class="btn btn-sm btn-success">Tampilkan</a>
          </td>-->
        </tr>
      @endforeach
    </table>
  </div>
@endsection

3. isi KelasController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class KelasController extends Controller
{
    //
    public function index()
    {
     $data['kelas'] = \DB::table('t_kelas')
     ->orderBy('nama_kelas')
     //->orderBy('lokasi_ruangan')
     //->where('nama_wali_kelas','like','A%')
     //->orderBy('jurusan','nama_kelas')
     //->where('jurusan','=', 'Audio Video')
     ->get();
     return view('kelas',$data);
    }
    //create
    public function create(){
     return view('kelas.form');
    }
    //store
    public function store(Request $request){
     $rule=[
     'nama_kelas' => 'required|bail',
     'jurusan' => 'required',
     'lokasi_ruangan' => 'required',
     'nama_wali_kelas' => 'required|digits_between:5,30',
     ];
     $this->validate($request, $rule);

     $input = $request->all();
     unset($input['_token']);
     $status = \DB::table('t_kelas')->insert($input);

     if($status){
     return redirect('/kelas')->with('success','Data berhasil ditambahkan !!!');
     } else {
     return redirect('/kelas/create')->with('error','Data gagal ditambahkan !!!');
     }
    }
}

4.Isi dari form.blade.php kelas
@extends('layouts.app')
@section('content')

<div class="container">
@if(session('error'))
<div class="alert alert-error">
{{ session('error') }}
</div>
@endif

@if(count($errors) > 0)
<div class="alert alert-danger">
<strong>Warning !!!</strong>
<br>
<ul>
 @foreach($errors->all() as $error)
    <li>{{ $error }}</li>
    @endforeach
</ul>
</div>
@endif
</div>
    <form action="{{url('/kelas')}}" method="POST">
     @csrf
     <div class="container">
      <h3>Data Kelas</h3>
        <div class="col-md-12">
          <strong>Kelas :</strong>
          <input type="text" name="nama_kelas" class="form-control" placeholder="Masukan Kelas" value="{{ old('nama_kelas') }}">
        </div>
        <div class="col-md-12">
          <strong>Jurusan :</strong><br>
          <select name="jurusan"class="form-control" >
            <option value="">- Pilih Jurusan -</option>
            <option value="Audio Video" {{ old('jurusan') == 1 ? 'selected' : '' }}>Audio Video</option>
            <option value="Teknik Instalasi Tenaga Listrik" {{ old('jurusan') == 2 ? 'selected' : '' }}>Teknik Instalasi Tenaga Listrik</option>
            <option value="Teknik Otomasi Industri" {{ old('jurusan') == 3 ? 'selected' : '' }}>Teknik Otomasi Industri</option>
            <option value="Rekayasa Perangkat Lunak" {{ old('jurusan') == 4 ? 'selected' : '' }}>Rekayasa Perangkat Lunak</option>
            <option value="Teknik Komputer Jaringan" {{ old('jurusan') == 5 ? 'selected' : '' }}>Teknik Komputer Jaringan</option>
            <option value="Multimedia" {{ old('jurusan') == 6 ? 'selected' : '' }}>Multimedia</option>
          </select>
        </div>
        <div class="col-md-12">
          <strong>Ruangan :</strong>
          <input type="text" name="lokasi_ruangan" class="form-control" placeholder="Lokasi Ruangan" value="{{ old('lokasi_ruangan') }}">
        </div>
        <div class="col-md-12">
          <strong>Nama Wali Kelas :</strong>
          <input type="text" name="nama_wali_kelas" class="form-control" placeholder="Nama Walikelas" value="{{ old('nama_wali_kelas') }}">
        </div>
        <br>
        <div class="col-md-12">
          <button type="submit" class="btn btn-block btn-primary" value="Simpan">Submit</button>
          <a href="{{url('/kelas')}}" class="btn btn-block btn-danger">Back</a>
        </div>
    </form>
  </div>
@endsection

Hailnya


Study kasus 2
temukan bug
bug nya ada di golongan darah saat memasukan tipe golongan darah AB



Cara mengatasinya yaitu masuk ke database migration lalu ubah value goldar menjadi 2

STUDI KASUS 3

Sudah menangkap maksud dari fungsi old? Implementasikan fungsi tersebut untuk
field berjenis radio button dan field berjenis select option pada form siswa (Field
jenkel dan goldar)

Radio button
<b><label for="jenkel">Jenis Kelamin :</label></b>
     <div class="radio">
         <label>
             <input type="radio" name="jenkel" id="L" value="L" @if(old('jenkel')) checked @endif>
             Laki-laki
         </label>
     </div>
     <div class="radio">
         <label>
             <input type="radio" name="jenkel" id="P" value="P" @if(!old('jenkel')) checked @endif>
             Perempuan
         </label>
Selected item
<strong>Golongan Darah :</strong><br>
          <select name="goldar"class="form-control" >
           <option value="">- Pilih Goldar -</option>
           <option value="A" {{ old('goldar') == 'A' ? 'selected' : '' }}>A</option>
           <option value="B" {{ old('goldar') == 'B' ? 'selected' : '' }}>B</option>
           <option value="O" {{ old('goldar') == 'O' ? 'selected' : '' }}>O</option>
           <option value="AB" {{ old('goldar') == 'AB' ? 'selected' : '' }}>AB</option>
          </select>




Sekian Terimakasih

Comments