ساخت فیلتر برای Eloquent Models با بررسی مجوز فیلتر

Photo by James Sutton on Unsplashدر پستی قبلی پکیجی را معرفی کردم که برای شما این امکان را فراهم می کرد که برای مدل های خود در لاراول فیلتر ایجاد کنید. مشاهده پست در اینجا.آخرین نسخه منشتر شده از این پکیج در مخزن گیت هاب قابل دسترس می باشد: V1.0.0همانطور که قبلا توضیح دادم شما در یک پروژه نیاز به فیلتر کردن یک مدل مانند User دارید. مثلا فیلتر کردن کاربران بر اساس سن،جنسیت، وضعیت آنلاین یا آفلاین بودن و غیره... .ممکن است شما بخواهید یک فیلتر با مجوز خاصی اعمال شود.بعنوان مثال شما ممکن است تعیین کنید اگر یک کاربر مدیر است یا دارای یک حساب ممتاز می باشد می تواند فیلتر وضعیت آنلاین یا آفلاین بودن کاربران را اعمال کند.در ادامه برای درک بهتر یک مثال عملی را انجام خواهیم داد.راه اندازی فریم ورک لاراول و پکیج EloquentBuilderدر ابتدا اگر لاراول را نصب نکرده اید، دستور زیرا برای نصب اجرا کنید:$ composer create-project --prefer-dist laravel/laravel authorize-filterبعد از نصب وارد پروژه شوید و پکیج EloquentBuilder را با دستور زیر نصب کنید:$ composer require mohammad-fouladgar/eloquent-builderحالا باید در پوشه app پوشه جدیدی بنام EloquentFilters ایجاد کنید. این پوشه محل ذخیره سازی فیلتر مدل ها می باشد.ساخت Route و Controllerدر این مرحله، ما نیاز داریم به ساخت یک Route برای لیست و فیلتر کردن کاربران. بنابراین فایل routes/web.php را باز کنید و route زیر را اضافه کنید:routes/web.phpRoute::get('users', 'UserController@index');سپس باید یک کنترلر به اسم UserController به صورت زیر ایجاد کنیم: https://gist.github.com/mohammad-fouladgar/32a49b4ff9c287511a6128be86be86f9 حالا شما میتوانید url زیر را در مرورگر خود باز کنید:http://localhost:8000/usersبا اجرای این url لیست کاربران بدون محدودیت برمی گردد.در مرحله بعد دو فیلتر جنسیت و وضعیت را پیاده سازی خواهیم کرد.فیلتر جنسیت (GenderFilter)در این قسمت میخواهیم کاربران را براساس جنسیت فیلتر کنیم.ابتدا باید یک پوشه جدید بنام User در پوشه EloquentFilters ایجاد کنیم.این پوشه شامل فیلترهای مدل User می باشد.سپس یک فایل جدید بنام GenderFilter.php بصورت زیر بسازید:app/EloquentFilters/User/GenderFilter.php https://gist.github.com/mohammad-fouladgar/2850e3a62d20d92b0c486f3be43d64f1 بعد از ساخت فیلتر بالا،شما میتوانید آنرا بصورت زیر روی کوئری خود اعمال کنید:http://localhost:8000/users?filter[gender]=maleبا اجرای این url فقط لیست کاربرانی برمی گردد که جنسیت آنها male است.فیلتر وضعیت (StatusFilter)این فیلتر مشابه فیلتر جنسیت می باشد با این تفاوت که این فیلتر به کاربری که دارای حساب ممتاز باشد مجوز اعمال فیلتر بر روی کوئری را می دهد. به فیلتر زیر نگاهی داشته باشید:app/EloquentFilters/User/StatusFilter.php https://gist.github.com/mohammad-fouladgar/0744491c081fa1b601d1478b0b66d25a همانطور که مشاهده میکنید، این فیلتر یک متد بنام 'authorize' دارد. درون این متد میتوانید بررسی کنید که کاربر مجوز اعمال فیلتر داده شده را دارد یا خیر.برای اعمال فیلتر بالا url زیر را در مرورگر خود باز کنید:http://localhost:8000/users?filter[gender]=male&filter[status]=onlineاین url لیست کاربرانی که جنسیت male دارند و وضعیت آنها online می باشد را بر میگرداند.این در صورتی است که متد authorize مقدار true را برگرداند یا در کلاس فیلتر پیاده سازی نشود.(مانند فیلتر جنسیت)برای دیدن جزیئات بیشتر اینجا کلیک کنید.جمع بندیدر این مقاله نحوه استفاده از پکیج EloquentBuilder را در فریم ورک لاراول را یاد گرفتیم.همچنین یاد گرفتیم:چگونگی ساخت فیلتر برای یک مدلچگونگی اعمال فیلترها بر روی کوئریچگونگی چک کردن مجوز، قبل از اعمال فیلتر داده شدهو در نهایت داشتن یک کد تمیز،خوانا و قابل توسعه.امیدوارم که این آموزش مورد توجه شما قرار گرفته باشه. خوشحال میشم نظرات شما را داشته باشم.موفق باشید.