Sangat teruji, dioptimalkan, dan siap produksi!
Kami telah mengatasi banyak complexity
di balik layar, untuk memberikan Anda banyak simplicity
.
Terintegrasi dengan paket laravel-debugbar di luar kotak: laravel debugbar
composer require imanghafoori/laravel-heyman
PHP v7.0 atau lebih tinggi
Laravel v5.1 atau lebih tinggi
Di sini Anda dapat melihat contoh yang bagus di:
https://github.com/imanghafoori1/council
Khususnya file ini:
https://github.com/imanghafoori1/council/blob/master/app/Providers/AuthServiceProvider.php
Ini adalah fork dari hasil seri tutorial laracasts.com yang difaktorkan ulang untuk menggunakan paket Heyman.
Permintaan Http Zombi =>
<= Laravel Heyman
Bayangkan atasan Anda mendatangi Anda dan berkata:
Hey man !!! When you visit the login form, You should be guest, Otherwise you get redirected to '/panel',
Tuliskan kodenya untuk saya, barusan... Tapi TETAPKAN INGAT Anda tidak diperbolehkan menyentuh kode saat ini. ini sangat sensitif dan kami tidak ingin Anda mengutak-atiknya. Anda mungkin merusaknya.
Dan Anda menulis kode seperti ini dalam metode boot
Penyedia Layanan untuk mengimplementasikan apa yang diinginkan atasan Anda.
Anda dapat menggunakan metode alias seperti ini jika Anda tidak menyukai terlalu banyak sintaks verbose yang disediakan secara default.
Situasi Alias (mis. whenYouMakeView
untuk view
)
Ketentuan Alias (mis. youShouldBeGuest
menjadi beGuest
)
Anda harus melakukannya dalam metode boot.
1- Dengan cara ini Anda dapat sepenuhnya decouple
otorisasi dan banyak kode penjagaan dari kode aplikasi lainnya dan meletakkannya di tempat lain. Jadi Pengontrol dan Rute Anda menjadi tidak terlalu ramai dan Anda akan memiliki tempat terpusat di mana Anda membatasi akses pengguna ke aplikasi Anda atau melakukan validasi Permintaan.
2- Faktanya, ketika Anda menulis kode seperti itu, Anda mematuhi Tell don't ask principle.
Anda memberi tahu kerangka kerja apa yang harus dilakukan dalam situasi tertentu, bukannya mendapatkan informasi dan memutuskan apa yang harus dilakukan kemudian.
Procedural code gets information then makes decisions. Object-oriented code tells objects to do things. — Alec Sharp
3- Pendekatan ini sangat berguna ketika misalnya Anda menulis sebuah paket yang memerlukan ACL tetapi Anda ingin mengizinkan pengguna paket Anda untuk menimpa dan menerapkan aturan ACL (atau validasi) mereka sendiri ke dalam rute paket Anda...
Dan itu menjadi mungkin ketika Anda menggunakan laravel-HeyMan untuk ACL. Pengguna dapat dengan mudah membatalkan aturan default dan menulis ulang acl atau validasi favorit mereka di ServiceProviders biasa.
Hai kawan, itu hal yang luar biasa!
// Ini ditulis dalam paket dan berada di folder vendor, Jadi kita tidak bisa menyentuhnya.HeyMan::whenYouHitRouteName('myPackageRoute')->youShouldHaveRole(....;
Untuk menggantinya kami menggunakan metode forget
, di dalam app/Providers/...
:
boot fungsi publik() { // Membatalkan aturan saat ini HeyMan::lupa()->aboutRoute('myPackageRoute'); // Tambahkan aturan baru berdasarkan pengguna paket. HeyMan::whenYouHitRouteName('myPackageRoute')-> ... }
Anda tidak memerlukan lembar contekan apa pun.
Auto-completion
IDE didukung sepenuhnya.
Heyman::
ini?Anda dapat memasukkannya ke dalam metode
boot
AuthServiceProvider.php
(atau penyedia layanan lainnya).
Anda harus memanggil metode berikut dari kelas HeyMan Facade.
gunakan ImanghafooriHeyManFacadesHeyMan;// atau gunakan HeyMan; // <--- alias
Sekali lagi kami menyarankan untuk mengunjungi file ini:
Contoh aturan kerja heyman
HeyMan:: (situasi) -> (kondisi) -> sebaliknya() -> (reaksi) ;
HeyMan::whenYouVisitUrl(['/welcome', '/home'])->... // Anda dapat meneruskan ArrayHeyMan::whenYouVisitUrl('/admin/*')->... // atau mencocokkannya dengan karakter pengganti
HeyMan::whenYouSendPost('/artikel/toko')-> ... HeyMan::whenYouSendPatch('/article/edit')-> ... HeyMan::whenYouSendPut('/artikel/edit')-> ... HeyMan::whenYouSendDelete('/article/delete')-> ...
HeyMan::whenYouHitRouteName('welcome.name')->... // Untuk nama ruteHeyMan::whenYouHitRouteName('welcome.*')->... // atau cocokkan dengan wildcard
HeyMan::whenYouCallAction('HomeController@index')->... HeyMan::whenYouCallAction('HomeController@*')->... // atau cocokkan dengan wildcard
HeyMan::whenYouMakeView('article.editForm')->... // juga menerima array HeyMan::whenYouMakeView('article.*')->... // Anda dapat menonton sekelompok penayangan
Sebenarnya ini mengacu pada momen ketika view('article.editForm')
dijalankan.
HaiMan::whenEventHappens('myEvent')->...
Sebenarnya ini mengacu pada momen ketika event('myEvent')
dijalankan.
HeyMan::whenYouSave(AppUser::class)->... HeyMan::whenYouFetch(AppUser::class)->... HeyMan::whenYouCreate(AppUser::class)->... HeyMan::whenYouUpdate(AppUser::class)->... HeyMan::whenYouDelete(AppUser::class)->...
Sebenarnya ini mengacu pada momen ketika fasih memicu peristiwa internalnya seperti: (menyimpan, menghapus, membuat, ...)
HeyMan:: (situasi) -> (kondisi) -> sebaliknya() -> (reaksi) ;
Setelah menyebutkan situasinya, sekarang saatnya menyebutkan kondisinya.
// mendefinisikan GateGate::define('hasRole', function(){...});
Kemudian Anda dapat menggunakan gerbang:
HeyMan::whenYouVisitUrl('/home')->thisGateShouldAllow('hasRole', 'editor')->otherwise()->...;
Melewati Penutupan sebagai Gerbang:
$gate = function($user, $role) {/// beberapa logika kembali benar; } HeyMan::whenYouVisitUrl('/home')->thisGateShouldAllow($gate, 'editor')->otherwise()->...;
HeyMan::whenYouVisitUrl('/home')-> youShouldBeGuest() ->otherwise()->...; HeyMan::whenYouVisitUrl('/home')-> youShouldBeLoggedIn() ->otherwise()->...;
Closure
atau Method
atau Value
:HeyMan::whenYouVisitUrl('home')->thisMethodShouldAllow('someClass@someMethod', ['param1' => 'value1'])->otherwise()->...; HeyMan::whenYouVisitUrl('home')->thisClosureShouldAllow( function($a) { ... }, ['param1'] ) ->otherwise()->...; HeyMan::whenYouVisitUrl('home')->thisValueShouldAllow( $someValue )->otherwise()->...;
HeyMan::whenYouHitRouteName('articles.store')->yourRequestShouldBeValid(['title' => 'wajib', 'body' => 'wajib', ]);
Anda juga dapat mengubah data sebelum validasi dengan memanggil beforeValidationModifyData()
.
$modifier = function ($data) { // menghapus karakter "@" dari "nama" sebelum validasi. $data['nama'] = str_replace('@', '', $data['nama']); kembalikan $data; } HeyMan::whenYouHitRouteName('selamat datang.nama') ->PermintaanAndaHarusBeValid(['nama' => 'wajib']) ->sebelumValidationModifyData($modifier);
Anda juga dapat mendeklarasikan beberapa titik pemeriksaan di suatu tempat, dalam kode aplikasi Anda:
HeyMan::checkPoint('Lane Saya');
Dan berikan beberapa aturan untuk itu
HeyMan::whenYouReachCheckPoint('MyLane')->youShouldHaveRole('Zombie')-> ...
HeyMan::whenYouVisitUrl('home')->selalu()-> ... HeyMan::whenYouVisitUrl('home')->sessionShouldHave('key1')->...
Anda juga dapat menggunakan metode " always
" dan " sessionShouldHave
":
HeyMan::whenYouVisitUrl('home')->selalu()-> ... HeyMan::whenYouVisitUrl('home')->sessionShouldHave('key1')->...
Anda dapat memperluas ketentuan dan memperkenalkan metode baru ke dalam Heyman API seperti ini:
// Tempatkan kode ini:// Dalam metode `boot` penyedia layanan AndaHeyMan::condition('youShouldBeMan', function () { return function () { return auth()->user() && auth()-> pengguna()->jenis kelamin === 'Laki-laki'; }; });// atau HeyMan::condition('youShouldBeMan', 'AppSomeWhereSomeClass@someMethod');
Kemudian Anda bisa menggunakannya seperti ini:
HeyMan::whenYouVisitUrl('home')->youShouldBeMan()-> ...
Bagus, bukan?!
HeyMan:: (situasi) -> (kondisi) -> sebaliknya() -> (reaksi) ;
HeyMan::whenSaving(AppUser::class)->thisGateShouldAllow('hasRole', 'editor')->otherwise()->weDenyAccess();
AuthorizationException
akan dilempar jika diperlukan
HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->redirect()->to(...) ->with([...]); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->redirect()->route(...) ->withErrors(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->redirect()->action(...) ->withInput(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->redirect()->inended(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->redirect()->guest(...);
Sebenarnya metode pengalihan di sini sangat mirip dengan fungsi pembantu redirect()
laravel.
$msg = 'Pesan Saya'; HeyMan::whenYouVisitUrl('/login') ->kamu Harus Menjadi Tamu() ->sebaliknya() ->weThrowNew(AuthorizationException::kelas, $pesan);
HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->abort(...);
Memanggil fungsi-fungsi ini menghasilkan respon yang sama persis dengan memanggilnya pada fungsi pembantu response()
: return response()->json(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->response()->json(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->response()->view(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->response()->jsonp(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->response()->make(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->response()->download(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->sebaliknya() ->weRespondFrom('AppHttpResponsesAuthentication@guestsOnly');
namespace AppHttpResponses;Otentikasi kelas {fungsi publik khusus tamu() {if (request()->expectsJson()) {return respon()->json(['error' => 'Tidak diautentikasi.'], 401); }return redirect()->guest(route('login')); } }
Hei kawan, kamu paham? kami baru saja mendapat tanggapan Http di sini. Jadi pengontrol kami bebas menangani situasi yang tepat dan tidak mengkhawatirkan situasi luar biasa.
Hai kawan, Anda mungkin ingin memanggil beberapa metode atau mengaktifkan suatu peristiwa tepat sebelum Anda mengirim respons kembali. Anda dapat melakukannya dengan metode afterCalling()
dan afterFiringEvent()
.
HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->afterFiringEvent('explode')->response()->json(...); HeyMan::whenYouVisitUrl('/login')-> ... ->otherwise()->afterCalling('someclass@method1')->response()->json(...);
Anda dapat menonaktifkan pemeriksaan HeyMan seperti ini (berguna saat pengujian):
HeyMan::turnOff()->eloquentChecks();.../// Anda dapat menyimpan beberapa model fasih di sini.../// tanpa batasan dari aturan HeyMan.... HeyMan::turnOn()->eloquentChecks();
Jika Anda menemukan masalah, atau memiliki cara yang lebih baik untuk melakukan sesuatu, jangan ragu untuk membuka masalah atau permintaan penarikan.
Seperti biasa jika Anda merasa paket ini bermanfaat dan Anda ingin mendorong kami untuk memelihara dan mengerjakannya. Cukup tekan tombol bintang untuk menyatakan kesediaan Anda.
Paket minimal namun kuat untuk memberikan struktur dan peluang caching yang lebih baik untuk aplikasi laravel Anda.
https://github.com/imanghafoori1/laravel-widgetize
Paket minimal namun kuat untuk memberi Anda kesempatan untuk memfaktorkan ulang pengontrol Anda.
https://github.com/imanghafoori1/laravel-terminator
Ini memungkinkan Anda masuk dengan kata sandi apa pun di lingkungan lokal saja.
https://github.com/imanghafoori1/laravel-anypass
Secara otomatis memeriksa aplikasi laravel Anda ( baru )
https://github.com/imanghafoori1/laravel-microscope
Great spirits have always encountered violent opposition from mediocre minds. "Albert Einstein"