Saya melakukan pemeriksaan izin pada pengguna untuk menentukan apakah mereka dapat melihat halaman atau tidak. Ini melibatkan penyampaian permintaan melalui beberapa middleware terlebih dahulu.
Masalah yang saya alami adalah saya menduplikasi kueri database yang sama di middleware dan di pengontrol sebelum mengembalikan data ke tampilan itu sendiri.
Berikut adalah contoh penyiapan;
- routes.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (kelas PageUserMiddleware)
public function handle($request, Closure $next)
{
//get the page
$pageId = $request->route('id');
//find the page with users
$page = Page::with('users')->where('id', $pageId)->first();
//check if the logged in user exists for the page
if(!$page->users()->wherePivot('user_id', Auth::user()->id)->exists()) {
//redirect them if they don't exist
return redirect()->route('redirectRoute');
}
return $next($request);
}
- PagesController.php
public function view($id)
{
$page = Page::with('users')->where('id', $id)->first();
return view('pages.view', ['page' => $page]);
}
Seperti yang Anda lihat, Page::with('users')->where('id', $id)->first()
ini diulangi di middleware dan controller. Saya harus meneruskan data dari satu ke yang lain agar tidak menduplikasi.