تا حالا شده در پروژهای خود با پارامترهای زیادی برای ارسال به API روبرو شده باشید؟ و شما باید براساس آنها تعداد زیادی کوئری های پیچیده ای ایجاد کنید؟! پس اگر جواب شما مثبت هستش این مقاله را تا آخر دنبال کنید.
در ابتدا اگر شما قبلا مقاله ساخت جستجوی پیشرفته در لاراول را نخوانده اید به شما توصیه میکنم حتما آن را مطالعه کنید. در مقاله ذکر شده شما یاد میگیرید که چگونه برای مدل های Eloquent فیلترهای پیشرفته بسازید.
همچنین ممکن است شما به فیلترهای Secure نیاز داشته باشید. فیلترهای Secure مجوز لازم قبل از اعمال فیلتر برای کاربر را بررسی میکند که میتوانید مقاله مربوط به آن را در اینجا مطالعه کنید.
و حالا، اگر شما نخواهید ساختار پیش فرض لاراول را دنبال کنید راهکار برای ساخت فیلتر چیست؟
در یک پروژه کوچک شما میتوانید از معماری پیش فرض لاراول (MVC) استفاده کنید که ساختار دایرکتوری ها بصورت زیر می باشد:
. ├── app │ ├── Console ├── EloquentFilters // Default directory for filters │ └── Product │ ├── PriceMoreThanFilter.php │ └── User │ ├── AgeMoreThanFilter.php │ └── GenderFilter.php └── Exceptions │ ├── Http │ │ ├── Controllers │ │ ├── Middleware │ │ └── Requests │ └── Providers ├── bootstrap ├── config ├── database ├── public ├── resources ├── routes ├── storage
که شما میتوانید از EloquentBuilder به صورت زیر استفاده کنید:
اما زمانی که پروژه شما به مرور زمان بزرگ می شود، ساختار پیش فرض کافی نیست! درنهایت، شما مجبورید از معماری های متفاوتی (مانند Domain-Driven-Desgin, HMVC, …) استفاده کنید یا ساختار فعلی را تغییر دهید. به ساختار زیر توجه کنید:
. ├── app ├── bootstrap ├── config ├── database ├── Domains │ ├── Product │ │ ├── database │ │ │ └── migrations │ │ ├── src │ │ ├── Filters //Custom directory for Product model filters │ │ │ └── PriceMoreThanFilter.php │ │ ├── Entities │ │ ├── Http │ │ └── Controllers │ │ ├── routes │ │ └── Services │ ├── User │ │ ├── database │ │ │ └── migrations │ │ ├── src │ │ ├── Filters //Custom directory for User model filters │ │ │ └── AgeMoreThanFilter.php │ │ ├── Entities │ │ ├── Http │ │ └── Controllers │ │ ├── routes │ │ └── Services ...
در این اینجا از ساختار پیش فرض دایرکتوری لاراول استفاده نشده است.
این هفته، ورژن جدید EloquentBuilder منتشر شد. در این ورژن یک متد جدید بنام setFilterNamespace اضافه شد که به شما این قابلیت را می دهد که برای ”هر دامنه یا ماژول“ بصورت جداگانه filter namespace را تنظیم کنید.
حالا شما میتوانید بصورت زیر برای هر مدل از فیلترها استفاده کنید:
کار با پارامترهای ورودی API خسته کننده و پیچیده است. بنابراین استفاده از این پکیج میتواند شما را از این نوع پیچیدگی ها دور کند تا با خیال راحت خصوصا در پروژه هایی با ابعاد بزرگ بر روی منطق اصلی تمرکز کنید.