در این پست قصد داریم به بررسی روشهای بهینه برای استفاده از Middleware در لاراول بپردازیم. این روشها به شما کمک میکنند تا احراز هویت کاربران را به شکل سادهتری مدیریت کنید و از تکرار کدهای اضافی جلوگیری کنید.
به جای اینکه در هر کنترلر به صورت جداگانه Middleware را اعمال کنید، میتوانید آن را مستقیماً در فایلهای `routes/web.php` یا `routes/api.php` به مسیرها یا گروهی از مسیرها اضافه کنید.
use App\Http\Controllers\ProfileController;
اعمال میانافزار auth به مسیرهای خاص
Route::middleware(['auth'])->group(function () { Route::get('/profile/additional-info', [ProfileController::class, 'additionalInfo'])->name('profile.additional-info'); Route::post('/profile/update', [ProfileController::class, 'updateProfile'])->name('profile.update'); });
میتوانید یک Middleware را به صورت کلی و برای همه درخواستها یا بخشی از برنامه در فایل `app/Http/Kernel.php` اضافه کنید.
namespace App\Http; use Illuminate\Foundation\Http\Kernel as HttpKernel; class Kernel extends HttpKernel { protected $middlewareGroups = [ 'web' => [ // سایر میانافزارها \App\Http\Middleware\EnsureUserIsAuthenticated::class, ], ]; protected $routeMiddleware = [ 'auth' => \App\Http\Middleware\Authenticate::class, 'customAuth' => \App\Http\Middleware\EnsureUserIsAuthenticated::class, ]; }
برای کامپوننتهای Livewire، میتوانید از متد `boot` یا `mount` برای اعمال Middleware استفاده کنید.
namespace App\Http\Livewire; use Livewire\Component; use Illuminate\Support\Facades\Auth; class CheckoutComponent extends Component { public static function boot() { // اعمال میانافزار auth برای اطمینان از لاگین بودن کاربر static::middleware('auth'); } public function mount() { // در اینجا نیازی به چک کردن نیست $this->cart = Auth::user()->openCart(); } public function render() { return view('livewire.checkout-component'); } }
اگر چندین کنترلر دارید که نیاز به یک Middleware مشابه دارند، میتوانید یک `BaseController` ایجاد کنید که Middleware را در آن اعمال کرده و سپس بقیه کنترلرها را از آن ارثبری کنید.
namespace App\Http\Controllers; use Illuminate\Routing\Controller as BaseController; class AuthenticatedController extends BaseController { public function __construct() { $this->middleware('auth'); } }
حالا از این کنترلر ارثبری کنید.
class ProfileController extends AuthenticatedController { public function additionalInfo() { // لاگیک برای مدیریت اطلاعات اضافی پروفایل } public function updateProfile() { // لاگیک برای بهروزرسانی پروفایل } }
با استفاده از این روشها، میتوانید به صورت متمرکزتر و بهینهتر از Middlewareها در لاراول استفاده کنید، بدون اینکه نیاز به تکرار کد در هر کنترلر یا کامپوننت داشته باشید. این کار باعث میشود که کد شما تمیزتر و نگهداری آن آسانتر باشد.