Cara membuat aplikasi Laravel (contoh: ticket)
Cara membuat aplikasi Laravel (contoh: ticket)
1. Install XAMPP
XAMPP adalah perangkat lunak bebas, yang mendukung banyak sistem operasi, merupakan kompilasi dari beberapa program. Anda bisa mendownload XAMPP melalui link https://www.apachefriends.org/download.html lalu install dan click next saja sampai finish.
Jika sudah terinstall langkah pertama yang harus dilakukan untuk membuat aplikasi Laravel adalah menjalankan XAMPP lalu aktifkan Apache dan Mysql di XAMPP dengan cara click start, buka Command Prompt cara menekan tombol Windows + R pada keyboard, Ketik cmd kemudian OK. Masukkan perintah cd xampp/mysql/bin kemudian mysql –u root jika berhasil akan terdapat tulisan “Welcome to the Mysql” pada cmd.
2. Membuat Database
Database adalah kumpulan data yang disimpan secara sistematis di dalam komputer yang dapat diolah atau dimanipulasi menggunakan perangkat lunak (program aplikasi) untuk menghasilkan informasi.
Ketikkan Create database ticket; lalu ketik Use ticket; pada cmd.
Perintah Create database adalah untuk membuat database baru.
Perintah ticket; adalah nama databasenya.
Perintah Use adalah untuk menuju ke database yang dinginkan.
3. Membuat Tabel
Tabel adalah objek penting dalam database karena menyimpan semua informasi atau data.
Ketikkan kode berikut secara berurutan pada cmd.
Create table profiles(
id integer (10) primary key not null,
issue_category_id integer(10) foreign key not null,
issue_priority_id integer(10) foreign key not null,
name varchar(191) not null,
email varchar(191) not null,
description varchar(191) not null,
created_at timestamp null,
updated_at timestamp null
);
Perintah Create table adalah untuk membuat tabel baru.
Perintah profiles adalah nama tabelnya.
Perintah id, issue_category_id, issue_priority_id, name, email, description, created_at, dan updated_at adalah nama kolomnya.
Perintah integer(10), varchar(191), dan timestamp adalah nama tipe datanya dan jumlah huruf / angka yang dapat diisi dalam kolom.
Perintah primary key, dan foreign key adalah nilai dalam database.
Perintah not null, dan null adalah boleh atau tidaknya suatu kolom tidak diisi apapun.
Di dalam database ticket ada 4 tabel yang harus kita buat, yaitu:
a. Tabel Profiles
Tabel profiles untuk menyimpan data user_id, name, photo_url yang akan dihubungkan dengan tabel users.
b. Tabel Issues
Tabel issues untuk menyimpan data issue_category_id, issue_priority_id, name, email, dan description yang akan mengambil data dari tabel issuecategories dan issuepriorities.
c. Tabel Issuecategories
Tabel issuecategories untuk menyimpan data name dan description yang akan dikirim datanya ke tabel issues.
d. Tabel Issuespriorities
Tabel issuepriorities untuk menyimpan data name dan description yang akan dikirim datanya ke tabel issues.
Di dalam database ticket ada 3 tabel yang akan terbuat secara otomatis, yaitu:
a. Tabel Users
Ketika kita mengetikkan php artisan make:auth akan membuat tabel users secara otomatis untuk menyimpan data name, email, dan password yang akan dihubungkan dengan tabel profile.
b. Tabel Password_Reset
Ketika kita mengetikkan php artisan make:auth akan membuat tabel password_reset secara otomatis untuk menyimpan data email dan token yang akan dihubungkan dengan tabel users.
c. Tabel Migrations
Ketika kita mengetikkan php artisan migrate akan membuat tabel migrations secara otomatis untuk merangkum kegiatan-kegiatan yang telah dilakukan misal kita membuat tabel baru nanti secara otomatis di tabel migrations ada catatan bahwa kita telah membuat tabel baru lengkap dengan tanggalnya.
Ini contoh Entity Relationship Diagram (ERD) nya yang disesuaikan dengan tabel yang telah dibuat.
4. Install Composer
Composer adalah alat manajemen dependency pada PHP seperti npm (Node.js) dan Bundler (Ruby). Anda bisa mendownload Composer melalui link https://getcomposer.org/Composer-Setup.exe lalu install, jika anda disuruh untuk menempatkan file click saja browse lalu pilih folder XAMPP lalu pilih folder PHP kemudian pilih file php.exe kemudian OK dan click next saja sampai finish.
5. Install Laravel
Laravel adalah sebuah framework PHP yang dirilis dibawah lisensi MIT, dibangun dengan konsep MVC (model view controller).
Ketikkan perintah berikut pada cmd baru.
composer create-project --prefer-dist laravel/laravel ticket
Perintah composer adalah alat untuk mengatur ketergantungan pada PHP.
Perintah create-project adalah untuk membuat proyek baru.
Perintah --prefer-dist adalah untuk memilih paket yang disiapkan untuk didistribusikan bukan pengembangan.
Perintah laravel/ adalah yang membuat.
Perintah laravel ticket adalah nama proyeknya.
Ketika sudah berhasil akan muncul sebuah folder bernama ticket didalam folder xampp kemudian htdocs terdapat file yang isinya adalah sebagai berikut.
1. The Root Directory
a. The App Directory
Direktori aplikasi, berisi kode inti aplikasi anda.
b. The Bootstrap Directory
Direktori bootstrap berisi file app.php yang mem-bootstrap framework. Direktori ini juga menampung direktori cache yang berisi kerangka kerja file yang dihasilkan untuk optimasi kinerja seperti route dan file cache layanan.
c. The Config Directory
Direktori config, berisi semua file konfigurasi aplikasi anda. Merupakan ide bagus untuk membaca semua file ini dan membiasakan diri dengan semua opsi yang tersedia untuk anda.
d. The Database Directory
Direktori basis data berisi migrasi basis data anda, pabrik percontohan, dan benih. Jika diinginkan, anda juga dapat menggunakan direktori ini untuk memegang basis data SQLite.
e. The Public Directory
Direktori publik berisi file index.php, yang merupakan titik masuk untuk semua permintaan yang memasuki aplikasi anda dan mengonfigurasi autoloading. Direktori ini juga menampung aset anda seperti gambar, JavaScript, dan CSS.
f. The Resources Directory
Direktori sumber daya berisi pandangan anda serta aset mentah anda yang belum dikompilasi seperti LESS, SASS, atau JavaScript. Direktori ini juga menampung semua file bahasa anda.
g. The Routes Directory
Direktori route berisi semua definisi route untuk aplikasi anda. Secara default, beberapa file route disertakan dengan Laravel: web.php, api.php, console.php, dan channels.php.
File web.php berisi route yang ditempatkan RouteServiceProvider di grup middleware web, yang menyediakan status sesi, perlindungan CSRF, dan enkripsi cookie. Jika aplikasi anda tidak menawarkan API yang RESTful tanpa kewarganegaraan, semua route anda kemungkinan besar akan ditentukan dalam file web.php.
File api.php berisi route yang ditempatkan RouteServiceProvider di grup api middleware, yang menyediakan pembatasan tingkat. Route-route ini dimaksudkan untuk menjadi tanpa kewarganegaraan, jadi permintaan yang memasuki aplikasi melalui route-route ini dimaksudkan untuk diautentikasi melalui token dan tidak akan memiliki akses ke status sesi.
File console.php adalah tempat anda dapat mendefinisikan semua perintah konsol berbasis closure anda. Setiap Penutupan terikat pada contoh perintah yang memungkinkan pendekatan sederhana untuk berinteraksi dengan metode IO setiap perintah. Meskipun file ini tidak menentukan route HTTP, ia mendefinisikan titik masuk berbasis konsol (route) ke dalam aplikasi anda.
File channels.php adalah tempat anda dapat mendaftarkan semua saluran siaran event yang didukung aplikasi anda.
h. The Storage Directory
Direktori penyimpanan berisi templat Blade yang dikompilasi, sesi berbasis file, cache file, dan file lain yang dihasilkan oleh framework. Direktori ini dipisahkan menjadi direktori aplikasi, kerangka kerja, dan log.
Direktori aplikasi dapat digunakan untuk menyimpan file apa pun yang dihasilkan oleh aplikasi anda.
Direktori framework digunakan untuk menyimpan framework file yang dihasilkan dan cache. Akhirnya, direktori log berisi file-file log aplikasi anda.
Direktori penyimpanan / aplikasi / publik dapat digunakan untuk menyimpan file yang dibuat pengguna, seperti avatar profil, yang harus dapat diakses secara publik. anda harus membuat tautan simbolis di tempat umum / penyimpanan yang menunjuk ke direktori ini. anda dapat membuat tautan menggunakan php artisan storage: perintah tautan.
i. The Test Directory
Direktori tes berisi tes otomatis anda. Contoh uji PHPUnit disediakan di luar kotak. Setiap kelas tes harus diakhiri dengan kata Test. Anda dapat menjalankan tes menggunakan perintah phpunit atau php vendor/bin/phpunit.
j. The Vendor Directory
Direktori vendor berisi dependensi Composer anda.
2. The App Directory
a. The Broadcasting Directory
Direktori Penyiaran berisi semua kelas saluran siaran untuk aplikasi anda. Kelas-kelas ini dihasilkan menggunakan perintah make: channel. Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda ketika anda membuat saluran pertama anda.
b. The Console Directory
Direktori Konsol berisi semua perintah Artisan khusus untuk aplikasi anda. Perintah-perintah ini dapat dihasilkan menggunakan perintah make: command. Direktori ini juga menampung kernel konsol anda, yang merupakan tempat perintah Artisan kustom anda didaftarkan dan tugas terjadwal anda ditentukan.
c. The Events Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda oleh event:generate dan perintah make:event Artisan. Direktori Event, menampung kelas event. Event dapat digunakan untuk mengingatkan bagian lain dari aplikasi anda bahwa suatu tindakan telah terjadi, memberikan banyak fleksibilitas dan decoupling.
d. The Exceptions Directory
Direktori Pengecualian berisi penangan pengecualian aplikasi anda dan juga merupakan tempat yang baik untuk menempatkan pengecualian yang dilemparkan oleh aplikasi anda. Jika anda ingin menyesuaikan bagaimana pengecualian anda dicatat atau diberikan, anda harus memodifikasi kelas Handler di direktori ini.
e. The Http Directory
Direktori Http berisi permintaan controllers, middleware, dan formulir anda. Hampir semua logika untuk menangani permintaan memasuki aplikasi anda akan ditempatkan di direktori ini.
f. The Jobs Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah make: job Artisan. Direktori Pekerjaan menampung pekerjaan yang bisa antrean untuk aplikasi anda. Pekerjaan dapat diantrekan oleh aplikasi anda atau dijalankan secara sinkron dalam siklus permintaan saat ini. Pekerjaan yang berjalan secara sinkron selama permintaan saat ini kadang-kadang disebut sebagai "perintah" karena merupakan implementasi dari pola perintah.
g. The Listeners Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah event: generate atau make: listener Artisan. Direktori Pendengar berisi kelas yang menangani event anda. Pendengar event menerima instance kejadian dan melakukan logika sebagai respons terhadap kejadian yang dipecat. Misalnya, event UserRegistered mungkin ditangani oleh pendengar SendWelcomeEmail.
h. The Mail Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah make: mail Artisan. Direktori Mail berisi semua kelas anda yang mewakili email yang dikirim oleh aplikasi anda. Objek mail memungkinkan anda merangkum semua logika membangun email dalam satu kelas sederhana yang dapat dikirim menggunakan metode Mail :: send.
i. The Notifications Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah make: notification Artisan. Direktori Notifikasi berisi semua notifikasi "transaksional" yang dikirim oleh aplikasi anda, seperti notifikasi sederhana tentang peristiwa yang terjadi dalam aplikasi anda. Pemberitahuan Laravel menampilkan abstrak pengiriman pemberitahuan melalui berbagai driver seperti email, Slack, SMS, atau disimpan dalam database.
j. The Policies Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah make: policy Artisan. Direktori Kebijakan berisi kelas kebijakan otorisasi untuk aplikasi anda. Kebijakan digunakan untuk menentukan apakah pengguna dapat melakukan tindakan tertentu terhadap sumber daya.
k. The Providers Directory
Direktori Penyedia berisi semua penyedia layanan untuk aplikasi anda. Penyedia layanan bootstrap aplikasi anda dengan mengikat layanan di wadah layanan, mendaftarkan event, atau melakukan tugas-tugas lain untuk mempersiapkan aplikasi anda untuk permintaan yang masuk.
Dalam aplikasi Laravel yang baru, direktori ini sudah akan berisi beberapa penyedia. anda bebas menambahkan penyedia anda sendiri ke direktori ini sesuai kebutuhan.
l. The Rules Directory
Direktori ini tidak ada secara default, tetapi akan dibuat untuk anda jika anda menjalankan perintah make: rule Artisan. Direktori Aturan berisi objek aturan validasi khusus untuk aplikasi anda. Aturan digunakan untuk merangkum logika validasi yang rumit dalam objek sederhana.
6. Konfigurasikan Database MySQL
Buka file .env di dalam proyek ticket Laravel dan menambahkan kredensial database.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ticket
DB_USERNAME=root
DB_PASSWORD=
Perintah DB_CONNECTION=mysql adalah untuk menghubungkan database mysql.
Perintah DB_HOST=127.0.0.1 adalah untuk menghubungkan localhost dengan alamat 127.0.0.1.
Perintah DB_PORT=3306 adalah untuk menghubungkan port 3306.
Perintah DB_DATABASE=ticket adalah untuk menghubungkan database ticket.
Perintah DB_USERNAME=root adalah untuk menghubungkan username karena database saya tidak diprivacy jadi ketik saja root.
Perintah DB_PASSWORD= adalah untuk menghubungkan password karena database saya tidak diprivacy jadi jangan ketik apapun.
7. Buat Autentikasi (Username Dan Password)
1. Authentication Quickstart
a. Routing
Laravel menyediakan cara cepat untuk merancah semua route dan tampilan yang anda perlukan untuk autentikasi menggunakan satu perintah sederhana yaitu: php artisan make: auth.
Perintah ini harus digunakan pada aplikasi baru dan akan menginstall tampilan tata letak, registrasi dan tampilan login, serta route untuk semua titik akhir autentikasi. HomeController juga akan dibuat untuk menangani permintaan pasca-masuk ke dasbor aplikasi anda.
b. Tampilan
Seperti disebutkan di bagian sebelumnya, perintah php artisan make: auth akan membuat semua tampilan yang anda butuhkan untuk autentikasi dan menempatkannya di direktori resources / views / auth.
Perintah make: auth juga akan membuat direktori sumber daya / tampilan / tata letak yang berisi tata letak dasar untuk aplikasi anda. Semua tampilan ini menggunakan kerangka Bootstrap CSS, tetapi anda bebas untuk menyesuaikannya sesuka anda.
c. Authenticating
Sekarang setelah anda memiliki pengaturan route dan tampilan untuk controllers autentikasi yang disertakan, anda siap mendaftar dan mengautentikasi pengguna baru untuk aplikasi anda! Anda dapat mengakses aplikasi anda di browser karena controllers autentikasi sudah mengandung logika (melalui sifat mereka) untuk mengautentikasi pengguna yang ada dan menyimpan pengguna baru dalam database.
d. Path Customization
Ketika seorang pengguna berhasil diautentikasi, mereka akan dialihkan ke / home URI. Anda dapat mengkustomisasi lokasi pengarahan ulang autentikasi dengan menetapkan properti redirectTo di LoginController, RegisterController, ResetPasswordController, dan VerificationController: protected $ redirectTo = '/';.
Selanjutnya, anda harus memodifikasi metode pegangan middleware RedirectIfAuthenticated untuk menggunakan URI baru anda saat mengarahkan pengguna.
Jika jalur pengalihan membutuhkan logika pembuatan kustom, anda dapat menentukan metode redirectTo alih-alih properti redirectTo:
protected function redirectTo()
{
return '/path';
}
e. Username Customization
Secara default, Laravel menggunakan bidang email untuk autentikasi. Jika anda ingin menyesuaikan ini, anda dapat menentukan metode nama pengguna pada LoginController anda:
public function username()
{
return 'username';
}
f. Guard Customization
Anda juga dapat menyesuaikan "penjaga" yang digunakan untuk mengautentikasi dan mendaftarkan pengguna. Untuk memulai, tentukan metode penjaga di LoginController, RegisterController, dan ResetPasswordController anda. Metode harus mengembalikan instance penjaga:
use Illuminate\Support\Facades\Auth;
protected function guard()
{
return Auth::guard('guard-name');
}
g. Validation / Storage Customization
Untuk mengubah bidang formulir yang diperlukan saat pengguna baru mendaftar dengan aplikasi anda, atau untuk menyesuaikan bagaimana pengguna baru disimpan ke dalam basis data anda, anda dapat memodifikasi kelas RegisterController. Kelas ini bertanggung jawab untuk memvalidasi dan membuat pengguna baru aplikasi anda.
Metode validator dari RegisterController berisi aturan validasi untuk pengguna baru aplikasi. anda bebas memodifikasi metode ini sesuai keinginan.
Metode membuat RegisterController bertanggung jawab untuk membuat catatan App \ Pengguna baru dalam database anda menggunakan Eloquent ORM. Anda bebas untuk memodifikasi metode ini sesuai dengan kebutuhan basis data anda.
h. Mengambil Pengguna Yang Diautentikasi
Anda dapat mengakses pengguna terautentikasi melalui fasad Auth:
use Illuminate\Support\Facades\Auth;
// Get the currently authenticated user...
$user = Auth::user();
// Get the currently authenticated user's ID...
$id = Auth::id();
Atau, setelah pengguna diautentikasi, anda dapat mengakses pengguna yang diautentikasi melalui instance Illuminate \ Http \ Request. Ingat, kelas tipe-petunjuk akan secara otomatis disuntikkan ke dalam metode controllers anda:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfileController extends Controller
{
/**
* Update the user's profile.
*
* @param Request $request
* @return Response
*/
public function update(Request $request)
{
// $request->user() returns an instance of the authenticated user...
}
}
i. Menentukan Jika Pengguna Saat Ini Diautentikasi
Untuk menentukan apakah pengguna sudah masuk ke aplikasi anda, anda dapat menggunakan metode pemeriksaan pada fasad Auth, yang akan mengembalikan true jika pengguna dikonfirmasi:
use Illuminate\Support\Facades\Auth;
if (Auth::check()) {
// The user is logged in...
}
j. Melindungi Route
Route middleware hanya dapat digunakan untuk mengizinkan pengguna yang diautentikasi untuk mengakses route yang diberikan. Laravel dikirimkan bersama middleware auth, yang didefinisikan pada Illuminate \ Auth \ Middleware \ Authenticate. Karena middleware ini sudah terdaftar di kernel HTTP anda, yang perlu anda lakukan adalah melampirkan middleware ke definisi route:
Route::get('profile', function () {
// Only authenticated users may enter...
})->middleware('auth');
Tentu saja, jika anda menggunakan controllers, anda dapat memanggil metode middleware dari konstruktor controllers alih-alih melampirkannya dalam definisi route secara langsung:
public function __construct()
{
$this->middleware('auth');
}
k. Mengarahkan Pengguna Yang Tidak Diautentikasi
Ketika middleware auth mendeteksi pengguna yang tidak sah, itu akan mengarahkan pengguna ke route login bernama. Anda dapat memodifikasi perilaku ini dengan memperbarui fungsi redirectTo di file app / Http / Middleware / Authenticate.php anda:
/**
* Get the path the user should be redirected to.
*
* @param \Illuminate\Http\Request $request
* @return string
*/
protected function redirectTo($request)
{
return route('login');
}
l. Menentukan Penjaga
Saat melampirkan middleware auth ke route, anda juga dapat menentukan penjaga mana yang harus digunakan untuk mengautentikasi pengguna. Penjaga yang ditentukan harus sesuai dengan salah satu kunci dalam array penjaga file konfigurasi auth.php anda:
public function __construct()
{
$this->middleware('auth:api');
}
m. Login Throttling
Jika anda menggunakan kelas LoginController bawaan Laravel, sifat Illuminate \ Foundation \ Auth \ ThrottlesLogins sudah akan disertakan dalam controllers anda. Secara default, pengguna tidak akan bisa masuk selama satu menit jika mereka gagal memberikan kredensial yang benar setelah beberapa upaya. Pembatasan ini unik untuk nama pengguna / alamat email dan alamat IP mereka.
2. Pengguna Autentikasi Secara Manual
a. Menentukan Ketentuan Tambahan
Jika diinginkan, anda juga dapat menambahkan kondisi tambahan ke permintaan autentikasi selain email dan kata sandi pengguna. Misalnya, kami dapat memverifikasi bahwa pengguna ditandai sebagai "aktif":
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// The user is active, not suspended, and exists.
}
b. Mengakses Mesin Penjaga Spesifik
Anda dapat menentukan instance guard yang ingin anda manfaatkan menggunakan metode guard pada fasad Auth. Ini memungkinkan anda untuk mengelola autentikasi untuk bagian-bagian terpisah dari aplikasi anda menggunakan model atau tabel pengguna yang sepenuhnya dapat diautentikasi.
Nama penjaga yang diteruskan ke metode penjaga harus sesuai dengan salah satu penjaga yang dikonfigurasi dalam file konfigurasi auth.php anda:
if (Auth::guard('admin')->attempt($credentials)) {
//
}
c. Keluar
Untuk mengeluarkan pengguna dari aplikasi anda, anda dapat menggunakan metode logout pada fasad Auth. Ini akan menghapus informasi autentikasi di sesi pengguna: Auth::logout();
d. Mengingat Pengguna
Jika anda ingin memberikan fungsionalitas "ingat saya" dalam aplikasi anda, anda dapat memberikan nilai boolean sebagai argumen kedua ke metode upaya, yang akan membuat pengguna terautentikasi tanpa batas waktu, atau sampai mereka keluar secara manual. Tentu saja, tabel pengguna anda harus menyertakan kolom string remember_token, yang akan digunakan untuk menyimpan token "ingat saya".
if (Auth::attempt(['email' => $email, 'password' => $password], $remember)) {
// The user is being remembered...
}
Jika anda "mengingat" pengguna, anda dapat menggunakan metode viaRemember untuk menentukan apakah pengguna diautentikasi menggunakan cookie "ingat saya":
if (Auth :: viaRemember ()) {
//
}
e. Metode Autentikasi Lainnya
i. Autentikasi Instans Pengguna
Jika anda perlu mencatat instans pengguna yang ada ke dalam aplikasi anda, anda dapat memanggil metode login dengan instance pengguna. Objek yang diberikan harus merupakan implementasi dari kontrak Illuminate \ Contracts \ Auth \ Authenticatable. Tentu saja, model App \ User yang disertakan dengan Laravel sudah mengimplementasikan antarmuka ini:
Auth::login($user);
// Login and "remember" the given user...
Auth::login($user, true);
Tentu saja, anda dapat menentukan contoh penjaga yang ingin anda gunakan:
Auth::guard('admin')->login($user);
ii. Autentikasi Pengguna Dengan Id
Untuk login pengguna ke aplikasi dengan ID mereka, anda dapat menggunakan metode loginUsingId. Metode ini menerima kunci utama pengguna yang ingin anda authenticate:
Auth::loginUsingId(1);
// Login and "remember" the given user...
Auth::loginUsingId(1, true);
iii. Autentikasi Pengguna Sekali
Anda dapat menggunakan metode sekali untuk login pengguna ke aplikasi untuk satu permintaan. Tidak ada sesi atau cookie yang akan digunakan, yang berarti metode ini dapat membantu ketika membangun API tanpa kewarganegaraan:
if (Auth::once($credentials)) {
//
}
3. Autentikasi Dasar HTTP
Athentication Dasar HTTP Stateless
Anda juga dapat menggunakan HTTP Basic Autentikasi tanpa menetapkan cookie pengidentifikasi pengguna di sesi, yang sangat berguna untuk autentikasi API. Untuk melakukannya, tentukan middleware yang memanggil metode onceBasic. Jika tidak ada respons yang dikembalikan oleh metode onceBasic, permintaan dapat diteruskan lebih lanjut ke dalam aplikasi:
<?php
namespace App\Http\Middleware;
use Illuminate\Support\Facades\Auth;
class AuthenticateOnceWithBasicAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, $next)
{
return Auth::onceBasic() ?: $next($request);
}
}
Selanjutnya, daftarkan middleware route dan lampirkan ke route:
Route::get('api/user', function () {
// Only authenticated users may enter...
})->middleware('auth.basic.once');
4. Keluar
Memvalidasi Sesi Pada Perangkat Lain
Laravel juga menyediakan mekanisme untuk membatalkan dan "keluar" sesi pengguna yang aktif di perangkat lain tanpa membatalkan sesi di perangkat mereka saat ini. Sebelum memulai, anda harus memastikan bahwa middleware web Illuminate \ Session \ Middleware \ AuthenticateSession hadir dan tidak dikomentari di aplikasi anda / grup middleware web kelas Http / Kernel.php:
'web' => [
// ...
\Illuminate\Session\Middleware\AuthenticateSession::class,
// ...
],
Kemudian, anda dapat menggunakan metode logoutOtherDevices pada fasad Auth. Metode ini mengharuskan pengguna untuk memberikan kata sandi mereka saat ini, yang harus diterima aplikasi anda melalui formulir input:
use Illuminate\Support\Facades\Auth;
Auth::logoutOtherDevices($password);
5. Menambahkan Pengawal Kustom
Pelindung Permintaan Penutupan
Cara paling sederhana untuk mengimplementasikan sistem autentikasi berdasarkan permintaan HTTP, adalah dengan menggunakan metode Auth :: viaRequest. Metode ini memungkinkan anda untuk dengan cepat menentukan proses autentikasi anda menggunakan satu Penutupan.
Untuk memulai, panggil metode Auth :: viaRequest dalam metode boot AuthServiceProvider anda. Metode viaRequest menerima nama penjaga sebagai argumen pertama. Nama ini dapat berupa string apa pun yang menggambarkan penjaga kustom anda. Argumen kedua yang diteruskan ke metode harus Penutupan yang menerima permintaan HTTP yang masuk dan mengembalikan contoh pengguna atau, jika autentikasi gagal, null:
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
/**
* Register any application authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
Auth::viaRequest('custom-token', function ($request) {
return User::where('token', $request->token)->first();
});
}
Setelah penjaga kustom anda telah ditentukan, anda dapat menggunakan penjaga ini dalam konfigurasi penjaga dari file konfigurasi auth.php anda:
'guards' => [
'api' => [
'driver' => 'custom-token',
],
],
6. Menambahkan Penyedia Pengguna Khusus
a. Kontrak Penyedia Pengguna
Implementasi Illuminate \ Contracts \ Auth \ UserProvider hanya bertanggung jawab untuk mengambil implementasi Illuminate \ Contracts \ Auth \ Authenticatable dari sistem penyimpanan persisten, seperti MySQL, Riak, dll. Kedua antarmuka ini memungkinkan mekanisme autentikasi Laravel untuk terus berfungsi tanpa tentang bagaimana data pengguna disimpan atau jenis kelas apa yang digunakan untuk mewakilinya.
Mari kita lihat kontrak Illuminate \ Contracts \ Auth \ UserProvider:
<?php
namespace Illuminate\Contracts\Auth;
interface UserProvider {
public function retrieveById($identifier);
public function retrieveByToken($identifier, $token);
public function updateRememberToken(Authenticatable $user, $token);
public function retrieveByCredentials(array $credentials);
public function validateCredentials(Authenticatable $user, array $credentials);
}
Fungsi retrieveById biasanya menerima kunci yang mewakili pengguna, seperti ID penambahan-otomatis dari database MySQL. Implementasi Authenticatable yang cocok dengan ID harus diambil dan dikembalikan dengan metode ini.
Fungsi retrieveByToken mengambil pengguna dengan $ identifier unik mereka dan "ingat saya" $ token, disimpan dalam bidang remember_token. Seperti metode sebelumnya, implementasi Authenticatable harus dikembalikan.
Metode updateRememberToken memperbarui bidang $ user remember_token dengan token $ baru. Token baru diberikan pada upaya login "ingat saya" yang berhasil atau ketika pengguna keluar.
Metode retrieveByCredentials menerima berbagai kredensial yang diteruskan ke metode Auth :: upaya ketika mencoba masuk ke suatu aplikasi. Metode ini kemudian harus "query" penyimpanan persisten yang mendasari untuk pengguna yang cocok dengan kredensial tersebut. Biasanya, metode ini akan menjalankan kueri dengan kondisi "di mana" dengan $ kredensial ['nama pengguna']. Metode tersebut kemudian harus mengembalikan implementasi Authenticatable. Metode ini tidak boleh mencoba melakukan validasi atau autentikasi kata sandi.
Metode validateCredentials harus membandingkan $ user yang diberikan dengan kredensial $ untuk mengautentikasi pengguna. Misalnya, metode ini mungkin harus menggunakan Hash :: check untuk membandingkan nilai $ user-> getAuthPassword () dengan nilai $ kredensial ['kata sandi']. Metode ini harus mengembalikan benar atau salah yang menunjukkan apakah kata sandi itu valid.
b. Kontrak Authenticatable
Sekarang kita telah mengeksplorasi masing-masing metode pada UserProvider, mari kita lihat kontrak Authenticatable. Ingat, penyedia harus mengembalikan implementasi dari antarmuka ini dari retrieveById, retrieveByToken, dan metode retrieveByCredentials:
<?php
namespace Illuminate\Contracts\Auth;
interface Authenticatable {
public function getAuthIdentifierName();
public function getAuthIdentifier();
public function getAuthPassword();
public function getRememberToken();
public function setRememberToken($value);
public function getRememberTokenName();
}
Antarmuka ini sederhana. Metode getAuthIdentifierName harus mengembalikan nama bidang "kunci utama" pengguna dan metode getAuthIdentifier harus mengembalikan "kunci utama" pengguna. Di MySQL back-end, sekali lagi, ini akan menjadi kunci primer penambahan otomatis. GetAuthPassword harus mengembalikan kata sandi hash pengguna. Antarmuka ini memungkinkan sistem autentikasi untuk bekerja dengan kelas Pengguna apa pun, apa pun ORM atau lapisan abstraksi penyimpanan yang anda gunakan. Secara default, Laravel menyertakan kelas Pengguna di direktori aplikasi yang mengimplementasikan antarmuka ini, jadi anda dapat berkonsultasi dengan kelas ini untuk contoh implementasi.
7. Event
Laravel memunculkan beragam event selama proses autentikasi. Anda dapat melampirkan pendengar ke event ini di EventServiceProvider anda:
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Illuminate\Auth\Events\Registered' => [
'App\Listeners\LogRegisteredUser',
],
'Illuminate\Auth\Events\Attempting' => [
'App\Listeners\LogAuthenticationAttempt',
],
'Illuminate\Auth\Events\Authenticated' => [
'App\Listeners\LogAuthenticated',
],
'Illuminate\Auth\Events\Login' => [
'App\Listeners\LogSuccessfulLogin',
],
'Illuminate\Auth\Events\Failed' => [
'App\Listeners\LogFailedLogin',
],
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\LogSuccessfulLogout',
],
'Illuminate\Auth\Events\Lockout' => [
'App\Listeners\LogLockout',
],
'Illuminate\Auth\Events\PasswordReset' => [
'App\Listeners\LogPasswordReset',
],
];
8. Buat Model Dan File Migrasi
Model adalah rencana, representasi, atau deskripsi yang menjelaskan suatu objek, sistem, atau konsep, yang seringkali berupa penyederhanaan atau idealisasi. File migrasi proses memindahkan atau mentranformasikan data dari suatu konteks ke konteks lainnya yang berbeda.
Ketikkan perintah berikut untuk menghasilkan model dan file migrasi.
php artisan make:model profile –m
Perintah php artisan adalah perintah-perintah yang dijalankan dalam cmd.
Perintah make:model adalah untuk membuat model baru.
Perintah profile adalah nama modelnya.
Perintah –m adalah untuk membuat migrasinya.
Jika sudah membuat model maka didalam file database kemudian migrations akan terdapat file bernama 2019_01_18_020436_create_profile_table.php (sama dengan tanggal kapan dibuatnya dan nama model) kemudian buka dan tambahkan kode berikut.
public function up()
{
Schema::create('profile', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('name');
$table->string('photo_url');
$table->timestamps();
});
}
Dalam method up(), terdapat method create() dan class Schema yang berfungsi untuk membuat tabel baru dengan nama pages.
Perintah $table->increments('id'); untuk membuat kolom id di dalam tabel profiles dengan operator increment yang digunakan untuk menambah variabel sebanyak 1 angka.
Perintah $table->integer('user_id'); untuk membuat kolom user_id di dalam tabel profiles dengan tipe data integer yang berupa angka bulat seperti 1, 22, 100, 1000.
Perintah $table->string('name'); untuk membuat kolom name di dalam tabel profiles dengan tipe data string yang merupakan gabungan huruf, angka, whitespace (spasi), dan berbagai karakter.
Perintah $table->string('photo_url'); untuk membuat kolom photo_url di dalam tabel profiles dengan tipe data string yang merupakan gabungan huruf, angka, whitespace (spasi), dan berbagai karakter.
Perintah $table->timestamps(); untuk mengurutkan kolom-kolom pada tabel profiles yang menunjukkan tanggal atau waktu di mana peristiwa tertentu terjadi.
Tambahkan juga kode berikut di dalam file yang sama.
public function down()
{
Schema::dropIfExists('profile');
}
sedangkan di method down() sendiri berisi method dropIfexists() dari class Schema yang berfungsi untuk menghapus tabel pages apabila di-rollback.
Oke sekarang, migrasi tabel menggunakan perintah berikut.
php artisan migrate
Perintah migrate adalah untuk menjalankan migrasi pada tabel profiles.
9. Buat Route Dan Controller
Pertama, buat ProfileController menggunakan perintah berikut.
php artisan make:controller ProfileController --resource
Perintah make:controller adalah untuk membuat controller baru.
Perintah ProfileController adalah nama controllernya.
Sekarang, di dalam rotues >> file web.php, tambahkan baris kode berikut.
Route:resource(‘profile’, ‘ProfileController’);
Perintah Route:resource adalah untuk mendefinisikan prefix di URL.
Perintah (‘profile’, ‘ProfileController’); adalah nama model dan controllernya.
Oke, sekarang buka file ProfileController.php, dan anda dapat melihat bahwa semua fungsi deklarasi ada di sana.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Profile;
use Auth;
//Importing laravel-permission models
//Enables us to output flash messaging
use Session;
class ProfileController extends Controller
{
public function __construct() {
$this->middleware(['auth', 'isEditor']); //isAdmin middleware lets only users with a //specific permission permission to access these resources
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
// Tampil data
$ticket = \App\Profile::all();
return view('index', compact('ticket'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view ('laporanisu');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->validate(
$request,
array(
'user_id => required',
'name => required',
'photo_url => required'
)
);
$profiles = new Profile;
$profiles->user_id = $request->user_id;
$profiles->name = $request->name;
$profiles->photo_url = $request->photo_url;
$profiles->save();
return redirect()->route('profile.index')->with('Sukses', 'Data sudah dibuat');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$ticket = \App\Profile::find($id);
return view ('show', compact('ticket'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$profile = \App\Profile::find($id);
return view('edit', compact('profile'));
}
/**
* Update the specified resource in sticket
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$ticket = \App\Profile::find($id);
$ticket->user_id = $request->get('user_id');
$ticket->name = $request->get('name');
$ticket->photo_url = $request->get('photo_url');
$ticket->save();
return redirect()->route('profile.index')->with('Sukses', 'Data sudah diperbaharui');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$profile = \App\Profile::findOrFail($id);
$profile->delete();
return redirect()->route('profile.index')
->with('Sukses',
'Data sudah dihapus');
}
}
Disini saya menggunakan resource tetapi sebenarnya ada 2 jenis controllers yang akan saya jelaskan, yaitu:
1. Basic Controllers
Di bawah ini adalah contoh dari kelas controllers dasar. Perhatikan bahwa controllers memperluas kelas controllers dasar yang disertakan dengan Laravel. Kelas dasar menyediakan beberapa metode kenyamanan seperti metode middleware , yang dapat digunakan untuk melampirkan middleware ke tindakan controllers:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
class UserController extends Controller { /** * Show the profile for the given user. * * @param int $id * @return View */ public function show($id) { return view('user.profile', ['user' => User::findOrFail($id)]); } }
Anda dapat menentukan route ke tindakan controllers ini seperti:
Route::get('user/{id}', ' UserController@show ');
Sekarang, ketika permintaan cocok dengan URl route yang ditentukan, metode show pada kelas UserController akan dieksekusi. Tentu saja, parameter route juga akan diteruskan ke metode.
2. Resources Controllers
Routing sumber daya Laravel memberikan route “CRUD” khas ke controllers dengan satu baris kode. Misalnya, anda mungkin ingin membuat controllers yang menangani semua permintaan HTTP untuk "foto" yang disimpan oleh aplikasi anda. Menggunakan perintah make:controller Artisan, kita dapat dengan cepat membuat controllers seperti itu:
php artisan make:controller PhotoController --resource
Perintah ini akan menghasilkan controllers di app/Http/Controllers/PhotoControllers. Controllers akan berisi metode untuk setiap operasi sumber daya yang tersedia.
Selanjutnya, anda dapat mendaftarkan route yang banyak akal ke controller:
Route::resource(‘photos’, ‘PhotoController’);
Deklarasi route tunggal ini menciptakan banyak route untuk menangani berbagai tindakan pada sumber daya. Controllers yang dihasilkan sudah memiliki metode stubbed untuk masing-masing tindakan ini, termasuk catatan yang memberi tahu anda tentang kata kerja HTTP dan URI yang mereka tangani.
Anda dapat mendaftarkan banyak controllers sumber daya sekaligus dengan mengirimkan array ke metode resources :
Route::resources([ 'photos' => 'PhotoController', 'posts' => 'PostController' ]);
10. Buat Tampilan
Di dalam resources >> folder views. Di dalam folder itu, buat empat file berikut.
a. create.blade.php(laporanisu.blade.php)
b. index.blade.php
c. show.blade.php
d. edit.blade.php
Namun di dalam folder views, kita juga perlu membuat file template. Jadi buat satu file di dalam folder views bernama template.blade.php. Tambahkan kode berikut di dalam file template.blade.php.
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Ticket</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
@stack('style')
</head>
<body>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
@yield('content')
</body>
</html>
Jadi pada dasarnya file ini adalah file template utama, dan semua file tampilan lainnya akan memperpanjang file ini. Di sini, saya telah menyertakan bootstrap.
Langkah selanjutnya adalah membuat kode file create.blade.php(laporanisu.blade.php). Jadi tulis kode berikut di dalamnya.
@extends('template')
@push('style')
@endpush
@section('content')
<div class="container">
<form action="{{ route('profile.store') }}" method="post">
@csrf
<div class="form-group">
<label for="user_id">User Id :</label>
<input type="text" class="form-control" id="user_id" aria-describedby="user_id" placeholder="Enter your user id" name="user_id">
</div>
<div class="form-group">
<label for="name">Name :</label>
<input type="text" class="form-control" id="name" aria-describedby="name" placeholder="Enter your name" name="name">
</div>
<div class="form-group">
<label for="photo_url">Photo url :</label>
<input type="text" class="form-control" id="photo_url" aria-describedby="photo_url" placeholder="Enter your photo url" name="photo_url">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
@endsection
Oke, sekarang kita perlu membuka file ProfileController.php, dan pada fungsi create, kita perlu mengembalikan view, dan itu adalah file create.blade.php(laporanisu.blade.php).
public function create()
{
return view ('laporanisu');
}
Simpan file dan mulai server pengembangan Laravel menggunakan perintah berikut pada cmd.
php artisan serve
Pergi ke http://localhost:4910/profile/create.
Anda dapat melihat sesuatu seperti ini.
11. Simpan Data
Sekarang, kita perlu kode fungsi store () untuk menyimpan data dalam database. Pertama, sertakan model profile.php di dalam file ProfileController.php.
public function store(Request $request)
{
$this->validate(
$request,
array(
'user_id => required',
'name => required',
'photo_url => required'
)
);
$profiles = new Profile;
$profiles->user_id = $request->user_id;
$profiles->name = $request->name;
$profiles->photo_url = $request->photo_url;
$profiles->save();
return redirect()->route('profile.index')->with('Sukses', 'Data sudah dibuat');
}
Jika validasi gagal, maka akan terjadi kesalahan, dan saya akan menampilkan di dalam file create.blade.php(laporanisu.blade.php).
Jika semua nilai baik dan lulus validasi, maka itu akan menyimpan nilai dalam database.
12. Tampilkan Data
Oke, sekarang buka file bernama index.blade.php dan tambahkan kode berikut.
@extends('app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<div>
<div class="row">
<div class="col-4">
<ul class="nav flex-column">
<li class="nav-item">
<center><a class="nav-link" href="{{route('profile.create')}}"><font color=red>Membuat Profile</font></a></center>
</li>
</ul>
</div>
<div class="col-8">
<div class="container">
<div><center><h1>Daftar Profile</h1></center></div>
</div>
<table class="table">
<thead>
<tr>
<th scope="col">No.</th>
<th scope="col">User Id</th>
<th scope="col">Name</th>
<th scope="col">Photo Url</th>
<th scope="col">Operations</th>
</tr>
</thead>
<tbody>
@php
$no = 1;
@endphp
@foreach($ticket as $voucher)
<tr>
<td>{{ $no++ }}</td>
<td><a href="{{route('profile.show', $voucher->id)}}"> <font color=red>{{ $voucher->user_id }}</font></a></td>
<td>{{ $voucher->name }}</td>
<td>{{ $voucher->photo_url }}</td>
<td>
<a href="{{ route('profile.edit', $voucher->id) }}" class="btn btn-info pull-left" style="margin-right: 3px;">Edit</a>
{!! Form::open(['method' => 'DELETE', 'route' => ['profile.destroy', $voucher->id] ]) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
@endsection
Hal berikutnya adalah kita perlu kode fungsi index () di dalam file ProfileController.php.
public function index()
{
// Tampil data
$ticket = \App\Profile::all();
return view('index', compact('ticket'));
}
Pergi ke http://localhost:4910/profile.
Anda dapat melihat sesuatu seperti ini.
13. Tampilkan Data Sesuai Id
Oke, sekarang buka file bernama show.blade.php dan tambahkan kode berikut.
@extends('template')
@push('style')
@endpush
@section('content')
<div class="container">
<table class="table">
<thead>
</thead>
<tbody>
<tr>
<th scope="row">User Id : <td>{{ $ticket->user_id }}</td></th>
</tr>
<tr>
<th scope="row">Name : <td>{{ $ticket->name }} </td></th>
</tr>
<tr>
<th scope="row">Photo Url : <td>{{ $ticket->photo_url }}</td></th>
</tr>
</tbody>
</table>
</div>
@endsection
Hal berikutnya adalah kita perlu kode fungsi show () di dalam file ProfileController.php.
public function show($id)
{
$ticket = \App\Profile::find($id);
return view ('show', compact('ticket'));
}
Pergi ke link http://localhost:4910/profile/1 atau http://localhost:4910/profile/2 sesuai dengan urutan id.
Anda dapat melihat sesuatu seperti ini.
14. Ubah Data
Oke, sekarang buka file bernama edit.blade.php dan tambahkan kode berikut.
@extends('template')
@push('style')
@endpush
@section('content')
<style>
.uper {
margin-top: 40px;
}
</style>
<div class="mx-auto"><center>
<div class="card uper w-50">
<div class="card-header">
Edit
</div>
<div class="card-body">
@if ($errors->any())
</div>
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div></br>
@endif
<form method="post" action="{{ route('profile.update', $profile->id) }}">
@method('PATCH')
@csrf
<div class="form-group">
<label for="user_id">User Id:</label>
<input type="text" class="form-control" name="user_id" value="{{ $profile->user_id }}" >
</div>
<div class="form-group">
<label for="nama">Name:</label>
<input type="text" class="form-control" name="name" value="{{ $profile->name }}" >
</div>
<div class="form-group">
<label for="photo_url">Photo Url:</label>
<input type="text" class="form-control" name="photo_url" value="{{ $profile->photo_url }}" >
</div>
<button type="submit" class="btn btn-primary">Update</button>
</form>
</center>
</div>
@endsection
Hal berikutnya adalah kita perlu kode fungsi edit () di dalam file ProfileController.php.
public function edit($id)
{
$profile = \App\Profile::find($id);
return view('edit', compact('profile'));
}
Hal berikutnya adalah kita perlu kode fungsi update () di dalam file ProfileController.php.
public function update(Request $request, $id)
{
$ticket = \App\Profile::find($id);
$ticket->user_id = $request->get('user_id');
$ticket->name = $request->get('name');
$ticket->photo_url = $request->get('photo_url');
$ticket->save();
return redirect()->route('profile.index')->with('Sukses', 'Data sudah diperbaharui');
}
Pergi ke link http://localhost:4910/issue/1/edit atau http://localhost:4910/issue/2/edit sesuai dengan urutan id.
Anda dapat melihat sesuatu seperti ini.
15. Menghapus Data
Tambahkan kode berikut dalam file ProfileController.php dalam folder Controllers.
public function destroy($id)
{
$profile = \App\Profile::findOrFail($id);
$profile->delete();
return redirect()->route('profile.index')
->with('Sukses',
'Data sudah dihapus');
}
16. Buat Tampilan Khusus Admin Dan Editor
Untuk menginstall paket laravel permission jalankan.
composer require spatie/laravel-permission
Selanjutnya termasuk paket ke daftar penyedia layanan kami, di config/app.php tambahkan Spatie\Permission\PeermissionServiceProvider::class sehingga file kita terlihat seperti ini
'providers' = > [ . . . Spatie \ Permission \ PermissionServiceProvider :: class , ];
Selanjutnya publikasikan file migrasi untuk paket ini dengan perintah.
php artisan vendor:publish --provider = "Spatie\Permission\PermissionServiceProvider" --tag = "migrations"
Publikasikan file konfigurasi untuk paket ini dengan menjalankan
php artisan vendor:publish --provider = "Spatie\Permission\PermissionServiceProvider" --tag = "config"
File config memungkinkan kita untuk mengatur lokasi model Eloquent dari kelas izin dan peran. Anda juga dapat secara manual mengatur nama tabel yang harus digunakan untuk mengambil peran dan izin anda.Selanjutnya kita perlu menambahkan sifat HasRoles ke model Pengguna:
use Illuminate \ Foundation \ Auth \ User as Authenticatable;
use Spatie \ Permission \ Traits \ HasRoles;
class User extends Authenticatable {
use HasRoles; // ...
}
Pembuat Formulir HTML Kolektif Laravel
Selanjutnya install pembangun Formulir HTML Kolektif Laravel karena ini akan berguna lebih lanjut ketika kita membuat formulir kami:
composer require laravelcollective/html
Kemudian tambahkan penyedia baru anda ke array penyedia config/app.php:
'providers' = > [ . . . Collective \ Html \ HtmlServiceProvider :: class , ];
Terakhir, tambahkan dua alias kelas ke array alias dari config/app.php:
'aliases' = > [ // ... 'Form' = > Collective \ Html \ FormFacade :: class , 'Html' = > Collective \ Html \ HtmlFacade :: class , // ... ],
Itu semua instalasi dan konfigurasi yang diperlukan. Peran dapat dibuat seperti model Eloquent biasa, seperti ini:
use Spatie \ Permission \ Models \ Role;
use Spatie \ Permission \ Models \ Permission;
$role = Role :: create ( [ 'name' = > 'writer' ] );
$permission = Permission :: create ( [ 'name' = > 'edit articles' ] );
Anda juga bisa mendapatkan izin yang terkait dengan pengguna seperti ini:
$permissions = $user - > permissions;
Dan menggunakan metode memetik, pluck() anda bisa mendapatkan nama-nama peran yang terkait dengan pengguna seperti ini:
$roles = $user - > roles ( ) - > pluck ( 'name' );
Metode lain yang tersedia untuk kami meliputi:
· givePermissionTo(): Memungkinkan kami memberikan pengajuan kepada pengguna atau peran
· revokePermissionTo(): Cabut izin dari pengguna atau peran
· hasPermissionTo(): Periksa apakah pengguna atau peran memiliki izin yang diberikan
· assignRole(): Menetapkan peran ke pengguna
· removeRole(): Menghapus peran dari pengguna
· hasRole(): Memeriksa apakah pengguna memiliki peran
· hasAnyRole(Role:all()): Memeriksa apakah pengguna memiliki daftar peran yang diberikan
· hasAllRole(Role::all): Memeriksa apakah pengguna memiliki semua daftar peran yang diberikan
Metode assignRole, hasRole, hasAnyRole, dan removeRole dapat menerima string, objek Spatie\Permission\Models\Role-object atau Spatie\Permission\Models\Role-object\Illuminate\Support\Collection. Metode givePermissionTo dan revokePermissionTo dapat menerima string atau objek Spatie\Permission\Models\Permission.
Laravel permission juga memungkinkan untuk menggunakan arahan Blade untuk memverifikasi jika pengguna yang login memiliki semua atau salah satu dari daftar peran yang diberikan:
@role('writer') I'm a writer! @else I'm not a writer...
@endrole
@hasrole('writer') I'm a writer! @else I'm not a writer...
@endhasrole
@hasanyrole(Role::all()) I have one or more of these roles! @else I have none of these roles...
@endhasanyrole
@hasallroles(Role::all()) I have all of these roles! @else I don't have all of these roles...
@endhasallroles
Arahan Blade di atas tergantung pada peran pengguna. Terkadang kita perlu memeriksa secara langsung dalam pandangan kita jika pengguna memiliki izin tertentu. Anda dapat melakukannya dengan menggunakan arahan asli @can Laravel:
@can('Edit Post') I have permission to edit
@endcan
###Controllers, Authentication dan Tampilan
Anda akan membutuhkan total empat pengendali untuk aplikasi ini. Mari kita gunakan pengontrol sumber daya, karena ini secara otomatis menambahkan metode rintisan untuk kita. Pengendali saya akan dipanggil.
1. PostController
2. UserController
3. RoleController
4. PermissionController
Beralihlah ke direktori ini dan buka file RegisterController.php. Hapus fungsi bcrypt dalam metode create, sehingga metode ini terlihat seperti ini.
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => $data['password'],
]);
}
Sebagai gantinya mari kita mendefinisikan mutator di app\User.php yang akan mengenkripsi semua bidang kata sandi kami. Di app\User.php tambahkan metode ini:
Public function setPasswordAttribute($password)
{
$this->attributes['password'] = bcrypt($password);
}
Ini akan memberikan fungsionalitas yang sama seperti sebelumnya, tetapi sekarang Anda tidak perlu menulis fungsi bcrypt ketika berhadapan dengan bidang kata sandi pada pengontrol berikutnya.
Juga dalam file RegisterController.php. Ubah properti $redirectTo() ke:
protected $redirectTo = '/' ;
Lakukan hal yang sama di file LoginController.php.
Selanjutnya, mari kita edit file resources/views/layouts/app.blade.php menyertakan: tautan 'Admin' tarik-turun tambahan untuk melihat semua pengguna dan file kesalahan yang memeriksa apakah formulir kami menghasilkan kesalahan. Tautan 'Admin' hanya akan dilihat oleh pengguna dengan Peran 'Admin'. Kami juga akan membuat custom styles.css yang akan memiliki gaya tambahan untuk resources/views/posts/index.blade.php. Penataannya hanya sebuah paragraf di penggoda tampilan indeks kami, file tersebut harus terletak di public/css/styles.css.
{{-- resources/views/layouts/app.blade.php --}}
<!DOCTYPE html>
<html lang="{{ config('app.locale') }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link href="{{ asset('css/styles.css') }}" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<!-- Scripts -->
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>
<script src="https://use.fontawesome.com/9712be8772.js"></script>
</head>
<body>
<div id="app">
<nav class="navbar navbar-default navbar-static-top">
<div class="container">
<div class="navbar-header">
<!-- Collapsed Hamburger -->
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#app-navbar-collapse">
<span class="sr-only">Toggle Navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- Branding Image -->
<a class="navbar-brand" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}
</a>
</div>
<div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar -->
<ul class="nav navbar-nav">
<li><a href="{{ url('/') }}">Home</a></li>
@if (!Auth::guest())
<li><a href="{{ route('posts.create') }}">New Article</a></li>
@endif
</ul>
<!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right">
<!-- Authentication Links -->
@if (Auth::guest())
<li><a href="{{ route('login') }}">Login</a></li>
<li><a href="{{ route('register') }}">Register</a></li>
@else
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li>
@role('Admin') {{-- Laravel-permission blade helper --}}
<a href="#"><i class="fa fa-btn fa-unlock"></i>Admin</a>
@endrole
<a href="{{ route('logout') }}"
onclick="event.preventDefault();
document.getElementById('logout-form').submit();">
Logout
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
{{ csrf_field() }}
</form>
</li>
</ul>
</li>
@endif
</ul>
</div>
</div>
</nav>
@if(Session::has('flash_message'))
<div class="container">
<div class="alert alert-success"><em> {!! session('flash_message') !!}</em>
</div>
</div>
@endif
<div class="row">
<div class="col-md-8 col-md-offset-2">
@include ('errors.list') {{-- Including error file --}}
</div>
</div>
@yield('content')
</div>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
File kesalahan adalah:
{{-- resources\views\errors\list.blade.php --}}
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Dan file styles.css hanyalah:
p.teaser {
text-indent: 30px;
}
###Post Controller
Pertama, mari kita buat file migrasi dan model untuk PostController
php artisan make:model Post -m
Perintah ini menghasilkan file migrasi di app\database\migrations untuk menghasilkan tabel MySQL baru bernama posting di database kami dan file model Post.php di direktori app . Mari kita edit file migrasi untuk memasukkan judul dan isi dari posting kami. Tambahkan bidang judul dan tubuh sehingga file migrasi terlihat seperti ini:
<?php
//database\migrations\xxxx_xx_xx_xxxxxx_create_posts_table.php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('body');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}
Setelah menyimpan file, jalankan migrasi lagi
php artisan migrate
Anda sekarang dapat memeriksa database untuk tabel dan kolom post.
Selanjutnya buat judul dan isi isian dari model Post dapat ditetapkan.
namespace App;
use Illuminate\Database\Eloquent\Model;
class Post extends Model {
protected $fillable = [
'title', 'body'
];
}
Sekarang mari kita buat pengontrol sumber daya kita.
php artisan make:controller PostController --resource
Ini akan membuat pengontrol kami dengan semua metode rintisan yang diperlukan. Edit file ini agar terlihat seperti ini
<?php
// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use Auth;
use Session;
class PostController extends Controller {
public function __construct() {
$this->middleware(['auth', 'clearance'])->except('index', 'show');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index() {
$posts = Post::orderby('id', 'desc')->paginate(5); //show only 5 items at a time in descending order
return view('posts.index', compact('posts'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create() {
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request) {
//Validating title and body field
$this->validate($request, [
'title'=>'required|max:100',
'body' =>'required',
]);
$title = $request['title'];
$body = $request['body'];
$post = Post::create($request->only('title', 'body'));
//Display a successful message upon save
return redirect()->route('posts.index')
->with('flash_message', 'Article,
'. $post->title.' created');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id) {
$post = Post::findOrFail($id); //Find post of id = $id
return view ('posts.show', compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id) {
$post = Post::findOrFail($id);
return view('posts.edit', compact('post'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id) {
$this->validate($request, [
'title'=>'required|max:100',
'body'=>'required',
]);
$post = Post::findOrFail($id);
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect()->route('posts.show',
$post->id)->with('flash_message',
'Article, '. $post->title.' updated');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id) {
$post = Post::findOrFail($id);
$post->delete();
return redirect()->route('posts.index')
->with('flash_message',
'Article successfully deleted');
}
}
Di sini kelas Post diimpor dari model kami dan kelas Auth yang dibuat dengan perintah make:auth sebelumnya. Ini diimpor sehingga anda dapat membuat kueri Eloquent pada tabel Post dan agar dapat memiliki akses ke informasi authentication pengguna kami. Dalam konstruktor dua middlewares dipanggil, satu adalah auth yang membatasi akses ke metode PostController untuk mengautentikasi pengguna, yang lain adalah custom middleware yang belum dibuat. Ini akan bertanggung jawab atas sistem Izin dan Peran kami. Selanjutnya, index dan show diteruskan ke metode kecuali untuk memungkinkan semua pengguna dapat melihat posting.
Metode index() mendaftar semua posting yang tersedia. Ini kueri tabel post untuk semua posting dan meneruskan informasi ini ke tampilan. Paginate() memungkinkan kita membatasi jumlah posting di halaman, dalam hal ini lima.
Metode create() hanya mengembalikan posts/create tampilan yang akan berisi formulir untuk membuat posting baru. Metode store() menyimpan input informasi dari posts/create tampilan. Informasi pertama divalidasi dan setelah disimpan, pesan kilat diteruskan ke tampilan posts/index.
Metode show() dari PostController memungkinkan kami menampilkan satu posting. Metode ini mengambil id post sebagai argumen dan meneruskannya ke metode Post::find(). Hasil kueri kemudian dikirim ke tampilan posts/show.
Metode edit() , mirip dengan metode create() hanya mengembalikan tampilan posts/edit yang akan berisi formulir untuk membuat posting mengedit. Metode update() mengambil informasi dari posts/edittampilan posts/edit dan memperbarui catatan. Metode destroy() mari kita hapus posting.
Sekarang anda memiliki PostController anda perlu mengatur route. Edit file app\routes\web.php agar terlihat seperti ini:
<?php
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/', 'PostController@index')->name('home');
Route::resource('users', 'UserController');
Route::resource('roles', 'RoleController');
Route::resource('permissions', 'PermissionController');
Route::resource('posts', 'PostController');
Route adalah route ke halaman rumah kami, di sini ia berganti nama menjadi home Route make:auth dihasilkan ketika anda menjalankan perintah make:auth . Ini menangani route terkait authentication. Empat route lainnya adalah untuk sumber daya yang akan dibuat nanti.
###Post Views
Hanya empat tampilan yang diperlukan untuk PostController. Buat file \resources\views\posts\index.blade.php, \resources\views\posts\create.blade.php, \resources\views\posts\show.blade.php, \resources\views\posts\edit.blade.php,
Edit file index.blade.php agar terlihat seperti ini
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row">
<div class="col-md-10 col-md-offset-1">
<div class="panel panel-default">
<div class="panel-heading"><h3>Posts</h3></div>
<div class="panel-heading">Page {{ $posts->currentPage() }} of {{ $posts->lastPage() }}</div>
@foreach ($posts as $post)
<div class="panel-body">
<li style="list-style-type:disc">
<a href="{{ route('posts.show', $post->id ) }}"><b>{{ $post->title }}</b><br>
<p class="teaser">
{{ str_limit($post->body, 100) }} {{-- Limit teaser to 100 characters --}}
</p>
</a>
</li>
</div>
@endforeach
</div>
<div class="text-center">
{!! $posts->links() !!}
</div>
</div>
</div>
</div>
@endsection
Perhatikan bahwa file ini memperluas file views/layouts/app.php, yang dihasilkan sebelumnya oleh perintah make:auth.
File create.blade.php terlihat seperti ini.
@extends('layouts.app')
@section('title', '| Create New Post')
@section('content')
<div class="row">
<div class="col-md-8 col-md-offset-2">
<h1>Create New Post</h1>
<hr>
{{-- Using the Laravel HTML Form Collective to create our form --}}
{{ Form::open(array('route' => 'posts.store')) }}
<div class="form-group">
{{ Form::label('title', 'Title') }}
{{ Form::text('title', null, array('class' => 'form-control')) }}
<br>
{{ Form::label('body', 'Post Body') }}
{{ Form::textarea('body', null, array('class' => 'form-control')) }}
<br>
{{ Form::submit('Create Post', array('class' => 'btn btn-success btn-lg btn-block')) }}
{{ Form::close() }}
</div>
</div>
</div>
@endsection
Tampilan show terlihat seperti ini:
@extends('layouts.app')
@section('title', '| View Post')
@section('content')
<div class="container">
<h1>{{ $post->title }}</h1>
<hr>
<p class="lead">{{ $post->body }} </p>
<hr>
{!! Form::open(['method' => 'DELETE', 'route' => ['posts.destroy', $post->id] ]) !!}
<a href="{{ url()->previous() }}" class="btn btn-primary">Back</a>
@can('Edit Post')
<a href="{{ route('posts.edit', $post->id) }}" class="btn btn-info" role="button">Edit</a>
@endcan
@can('Delete Post')
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
@endcan
{!! Form::close() !!}
</div>
@endsection
Di sini perintah can memeriksa apakah pengguna memiliki izin untuk Mengedit atau Menghapus Posting, jika demikian tombol Edit dan Hapus akan ditampilkan. Jika pengguna tidak memiliki izin ini, hanya tombol Kembali yang akan ditampilkan.
Tampilan edit hanya menampilkan formulir edit yang akan digunakan untuk memperbarui catatan:
@extends('layouts.app')
@section('title', '| Edit Post')
@section('content')
<div class="row">
<div class="col-md-8 col-md-offset-2">
<h1>Edit Post</h1>
<hr>
{{ Form::model($post, array('route' => array('posts.update', $post->id), 'method' => 'PUT')) }}
<div class="form-group">
{{ Form::label('title', 'Title') }}
{{ Form::text('title', null, array('class' => 'form-control')) }}<br>
{{ Form::label('body', 'Post Body') }}
{{ Form::textarea('body', null, array('class' => 'form-control')) }}<br>
{{ Form::submit('Save', array('class' => 'btn btn-primary')) }}
{{ Form::close() }}
</div>
</div>
</div>
@endsection
Ulangi langkah-langkah seperti yang sudah saya jelaskan pada tabel posts, users, permissions dan roles tetapi disesuaikan dengan isinya.
### Middleware
Untuk membatasi akses ke halaman rolesdan permissions, middleware dimasukkan disebut isAdmindi PermissionControllerdan RoleController. Middleware ini menghitung berapa banyak pengguna di tabel Users, dan jika ada lebih dari satu pengguna, ia memeriksa apakah Pengguna terotentikasi saat ini memiliki izin untuk 'Mengelola peran & izin'. Untuk membuat kunjungan izin http://localhost:4910/permissions/create. Lalu pergi ke http://localhost:4910/roles/create untuk membuat role, yang sekarang anda dapat menetapkan yang permission anda buat. Misalnya, anda dapat membuat izin yang disebut 'Administration Permission & Role' dan 'Admin' role tempat anda akan menetapkan ini permission. Buat AdminMiddleware di dalam direktori app/Http/MIddleware dan masukkan kode berikut:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use App\User;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$user = User::all()->count();
if (!($user == 1)) {
if (!Auth::user()->hasPermissionTo('Administer roles & permissions')) //If user does //not have this permission
{
abort('401');
}
}
return $next($request);
}
}
Middleware yang dipanggil clearance juga termasuk dalam kami PostController. Middleware ini akan memeriksa apakah a user memiliki Administration Permission & Role, Buat Posting, Edit Posting dan Hapus Posting.
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class ClearanceMiddleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next) {
if (Auth::user()->hasPermissionTo('Administer roles & permissions')) //If user has this //permission
{
return $next($request);
}
if ($request->is('posts/create'))//If user is creating a post
{
if (!Auth::user()->hasPermissionTo('Create Post'))
{
abort('401');
}
else {
return $next($request);
}
}
if ($request->is('posts/*/edit')) //If user is editing a post
{
if (!Auth::user()->hasPermissionTo('Edit Post')) {
abort('401');
} else {
return $next($request);
}
}
if ($request->isMethod('Delete')) //If user is deleting a post
{
if (!Auth::user()->hasPermissionTo('Delete Post')) {
abort('401');
}
else
{
return $next($request);
}
}
return $next($request);
}
}
Tambahkan AdminMiddleware::class dan ClearanceMiddleware::class ke $routeMiddleware properti /app/Http/kernel.php seperti ini:
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'isAdmin' => \App\Http\Middleware\AdminMiddleware::class,
'clearance' => \App\Http\Middleware\ClearanceMiddleware::class,
];
Di kedua middelware, pengecualian 401 akan dilemparkan jika kondisinya tidak terpenuhi. Mari kita buat halaman kesalahan 401 khusus:
{{-- \resources\views\errors\401.blade.php --}}
@extends('layouts.app')
@section('content')
<div class='col-lg-4 col-lg-offset-4'>
<h1><center>401<br>
ACCESS DENIED</center></h1>
</div>
@endsection
Lalu terapkan laravel permission itu pada aplikasi ticket laravel yang dibuat.
Dalam aplikasi ticket laravel yang menjadi admin adalah Zulfa yang tugasnya Administration roles & permissions sedangkan yang menjadi editor adalah Daniel yang tugasnya Edit articles.
Zulfa dijinkan jika mengakses users, permissions, dan roles tapi akan ditolak jika Zulfa mengakses profile, issue, issuecategory, dan issuepriority karena Zulfa itu admin bukan editor seperti pada gambar dibawah ini.
Daniel dijinkan jika mengakses profile, issue, issuecategory, dan issuepriority tapi akan ditolak jika Daniel mengakses users, permissions, dan roles karena Daniel itu editor bukan admin seperti pada gambar dibawah ini.
Tambahkan kontrol interaksi lanjutan
ke tabel HTML Anda
1. Bukalah aplikasi web browser anda kemudian ketikkan https://datatables.net/ pada alamat url.
2. Copy lah css dan paste kan pada alamat url lalu akan muncul coding yang banyak sekali.
3. Copy lah semua tulisan yang ada pada tampilan web browser anda dan paste kan pada syntax editor dan save file dengan nama jquery.dataTables.min.css di dalam folder public kemudian pilih css.
4. Bukalah aplikasi web browser anda lagi.
5. Copy lah js dan paste kan pada alamat url lalu akan muncul coding yang banyak sekali.
6. Copy lah semua tulisan yang ada pada tampilan web browser anda dan paste kan pada syntax editor dan simpan file dengan nama jquery.dataTables.min.js di dalam folder public kemudian pilih js.
7. Kemudian buka lah file app.blade dan tambahkan kode @stack('js') dan simpan lah.
8. Kemudian buka lah file index.blade.php dan tambahkan kode berikut.
@push('style')
<link rel="stylesheet" type="text/css" href="{{asset ('css/jquery.dataTables.min.css') }}">
@endpush
Dan tambahkan kode id="contoh" di dalam tag table dan tambahkan juga kode berikut.
@push('js')
<script type="text/javascript" src="{{asset ('js/jquery.dataTables.min.js') }}"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#contoh').DataTable();
} );
</script>
@endpush
9. Kemudian anda ketikkan alamat url pada web browser anda contoh: localhost:4910/profile dan anda bisa lihat sendiri bahwa tampilan nya akan berubah setelah anda melakukan langkah-langkah seperti di atas.
Kurang lebih tampillan nya akan sama seperti ini.
Lakukan hal yang sama seperti tabel profile pada tabel issue, tabel issuecategory, dan tabel issuepriority.





















Komentar
Posting Komentar