در برخی از پروژهها شما میخواهید که مثلا تعدادی از محصولات یا مقالات سایت شما توسط کاربران عادی قابل رویت یا حتی جستجو نباشد و فقط تعداد خاصی از اعضا (مثلا فقط ادمینها) بتوانند آنها را ببینند. خب برای پیاده سازی این امکان شما باید کلی کد بزنید و حتی تغییراتی در ساختار جداول دیتابیس ایجاد کنید تا بتوانید چنین فیچری را به سایت خودتان اضافه کنید.
اما حالا توسعه دهندگان لاراول با ارائهی یک پکیج خوب به نام Excludable این امکان را برای شما به راحتی فراهم کردند. در این مقاله سعی میکنم کار با این پکیج را که خیلی هم راحت است، به شما آموزش دهم.
ابتدا با کامپوزر پکیج را نصب میکنید.
composer require h-farm/laravel-excludable
سپس فایل مایگریشن آنرا ایجاد و با دستور ماگریشن جدول مورد نیاز آن را میسازیم.
php artisan vendor:publish --provider="HFarm\Excludable\ExcludableServiceProvider" --tag="excludable-migrations"
php artisan migrate
با دستور زیر فایل کانفیگ آن را ایجاد میکنیم.
php artisan vendor:publish --provider="HFarm\Excludable\ExcludableServiceProvider" --tag="excludable-config"
حالا کافیه trait مورد نیاز آن را به مُدلی که میخواهید این امکان را داشته باشد، اضافه کنید.
<?php namespace App\Models; use HFarm\Excludable\Excludable; class Article extends Model { use Excludable; protected $fillable = [ 'title', 'body', ]; }
حالا با دستورات زیر به راحتی میتوانید اون رکورد مورد نظر خودتون رو به جدول excludable اضافه کنید و به این ترتیب اون رکورد (که میتواند یک مقاله یا حتی یک کاربر باشد) را از دید سایر کاربران پنهان کنید.
use App\Models\Article; $article = Article::query()->findOrFail(1) $article->addToExclusion(); $article->excluded(); // returns true
دستور زیر میتوانید همه مقالات مورد نظر را (هم مقالات استثناء شده و هم سایر مقالات) را نمایش دهید.
use App\Models\Article; Article::withExcluded()->get();
همچنین با دستور زیر میتوانید تنها مقالات استثناء شده را ببینید.
use App\Models\Article; Article::onlyExcluded()->get();
اگر سوالی داشتید در کامنتها بپرسید، حتما پاسخ خواهم داد.