fouladgar.dev
fouladgar.dev
خواندن ۲ دقیقه·۵ سال پیش

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

Photo by James Sutton on Unsplash
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.php

Route::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 را در فریم ورک لاراول را یاد گرفتیم.

همچنین یاد گرفتیم:

  • چگونگی ساخت فیلتر برای یک مدل
  • چگونگی اعمال فیلترها بر روی کوئری
  • چگونگی چک کردن مجوز، قبل از اعمال فیلتر داده شده

و در نهایت داشتن یک کد تمیز،خوانا و قابل توسعه.


امیدوارم که این آموزش مورد توجه شما قرار گرفته باشه. خوشحال میشم نظرات شما را داشته باشم.


موفق باشید.

phplaraveleloquentfilter
Back-End Developer
شاید از این پست‌ها خوشتان بیاید