نوا یه پنل مدیریت پیشرفته و جذاب برای فریمورک Laravel هستش که تونسته بسیاری از نیازهای مدیران برای استفاده از داشبوردهای مدیریتی رو حل کنه. این پنل امکانات بسیاری رو برای مدیریت منابع، کاربران، نقشها و چیزای دیگه فراهم میکنه. میخوام به شکل خلاصه درباره قسمتهای مختلف نوا و نحوه ساخت و مدیریت اون چیزایی که میدونم رو در اختیارتون قرار بدم.
نصب و اهاندازی
1. نصب وابستگیها:
composer require laravel/nova
2. نصب نوا:
php artisan nova:install php artisan migrate
3. پیکربندی ورود:
از اونجایی که نوا نیاز به ورود داره، مطمئن بشید که سیستم احراز هویت شما به درستی پیکربندی شده باشه.
حالا بریم قسمتهای مختلف نوا رو بشناسیم
1. منابع (Resources)
- منابع (Resources) در نوا بالاترین سطح از واحدهای قابل مدیریت هستن و معمولاً به مدلهای Eloquent لاراول مرتبط میشن. هر منبع شامل متدهای مختلفی برای تعریف فیلدها، جستجو، فیلترها و اعمال دیگه هست.
دستور ایجاد Resource:
php artisan nova:resource Project
2. فیلدها (Fields)
فیلدها برای تعریف ستونهای مرتبط با مدل استفاده میشن و مشخص میکنن که چه اطلاعاتی در رابط کاربری نمایش داده بشه. فیلدهای متنوعی برای نمایش و ویرایش دیتا داریم.از جمله Text، Boolean، DateTime، BelongsTo، HasMany و... .
1. Text::make('Name')
- برای نمایش و ویرایش متون کوتاه.
2. Textarea::make('Description')
- برای نمایش و ویرایش متون بلند.
3. Boolean::make('Active')
- برای نمایش و ویرایش مقادیر صحیح یا غلط.
4. Date::make('Birthdate')
- برای نمایش و ویرایش تاریخها.
5.DateTime::make('Published At')
- برای نمایش و ویرایش زمان و تاریخ ترکیبی.
6. Number::make('Price')
- برای نمایش و ویرایش مقادیر عددی.
7.
Select::make('Status')->options([ draft' => 'Draft', 'published' => 'Published', 'archived' => 'Archived',])
- برای نمایش و ویرایش گزینههای انتخابی از یک لیست.
8. BooleanGroup::make('Permissions')
- برای نمایش و ویرایش چندین مقدار صحیح یا غلط به صورت گروهی.
9. Image::make('Profile Picture')
- برای بارگذاری و نمایش تصاویر.
10.File::make('Document')
- برای بارگذاری و نمایش فایلها.
11. Password::make('Password')
- برای نمایش و ویرایش رمز عبور.
تنظیمات اضافی فیلدها
1. nullable (پذیرش مقادیر تهی)
Text::make('Middle Name')->nullable()
2. required (ضروری بودن)
Text::make('First Name')->rules('required')
3. unique (یکتایی)
Text::make('Email')->rules('required', 'email', 'unique:users,email,{{resourceId}}')
4. displayUsing (نمایش سفارشی)
Number::make('Price')->displayUsing(function ($price) { return '$' . number_format($price, 2);})
5. sortable (قابل مرتبسازی بودن)
Text::make('Title')->sortable()
6.برای تعریف یک فیلد دارای ارتباط باید از فرمت زیر استفاده کنیم:
BelongsTo::make("label", "attribute", RelatedModel::class)
ویژگیهای فیلدها
ا `hideFromIndex()`: فیلد در لیست (index) نمایش داده نشه.
ا `hideWhenCreating()`: فیلد هنگام ایجاد یه رکورد جدید نمایش داده نشه.
ا `hideWhenUpdating()`: فیلد هنگام بروزرسانی یه رکورد موجود نمایش داده نشه.
ا `nullable()`: فیلد رو به صورت null تعریف میکنه.
ا `required()`:فیلد رو به عنوان اجباری تعریف میکنه.
ا `sortable()`: مکان مرتبسازی رکوردها بر اساس این فیلد رو فراهم میکنه.
ا `searchable()`: امکان جستجوی رکوردها بر اساس این فیلد رو فراهم میکنه.
ا `creationRules()`: برای افزودن قوانین اعتبارسنجی هنگام ایجاد رکورد استفاده میشه.
ا `onlyOnIndex()`: فیلد رو طوری تنظیم میکنه که فقط تو صفحه شاخص نمایش داده بشه.
ا `onlyOnForms()`: فیلد رو طوری تنظیم میکنه که فقط تو فرمها (ایجاد یا بروزرسانی) نمایش داده بشه.
ا `rules()`: برای تعیین قوانین اعتبارسنجی عمومی استفاده میشه.
ا `readonly()`: فیلد رو به حالت فقط خواندنی تنظیم میکنه.
بذارید مثالی از استفاده چند ویژگی برای یه فیلد `Text` بیاریم.
Text::make('Name') ->sortable() ->rules('required', 'max:255') ->hideWhenUpdating( ->showOnDetail() ->creationRules('unique:users,name') ->updateRules('unique:users,name,{resourceId}');
3.فیلترها (Filters)
- از فیلترها میتونیم برای محدود کردن نمایش دیتا استفاده کنیم. فیلترها میتونن بر اساس شرطهای مختلفی دادهها رو به نمایش بذارن.
class UserRole extends Filter{ public $name = 'User Role'; public function apply(Request $request, $query, $value) { return $query->where('role', $value); } public function options(Request $request){ return [ 'Admin' => 'admin', 'User' => 'user', 'Manager' => 'manager', ]; } }
4.عدسیها (Lenses)
لنزها برای سفارشیسازی نمای جدولها و نمایش دادههای خاص استفاده میشن.
class UsersWithMostPosts extends Lens{ public static function query(LensRequest $request, $query){ return $query->withCount('posts') ->orderBy('posts_count', 'desc'); } public function fields(Request $request){ return [ ID::make()->sortable(), Text::make('Name'), Number::make('Posts', 'posts_count')->sortable(), ]; } }
5. اکشنها (Actions)
اکشنها برای انجام عملیاتهای خاص روی منابع تعریف میشن.
تو فایل Resource ، میتونید به روش زیر دسترسیها رو سفارشیسازی کنید:
public static function authorizedToCreate(Request $request) { // بازگشتtrue یا false بر اساس اینکه آیا کاربر میتواند رکورد جدید ایجاد کند یا نه } public function authorizedToUpdate(Request $request) { // بازگشتtrue یا false بر اساس اینکه آیا کاربر میتواند این رکورد را ویرایش کند یا نه } public function authorizedToDelete(Request $request) { // بازگشتtrue یا false بر اساس اینکه آیا کاربر میتواند این رکورد را حذف کند یا نه }
6.کاردها (Cards)
- کارتها برای نمایش اطلاعات سفارشی در داشبورد استفاده میشن و میتونن به نمودارهای متفاوت و ویجتهای کاربردی تبدیل بشن.
namespace App\Nova; use Laravel\Nova\Metrics\Value; use Illuminate\Http\Request; class UserMetrics extends Resource { public function cards(Request $request) { return [ new Metrics\UsersPerDay, // نشانگر تعداد کاربران جدید در روز ]; } }
ساخت منوها
منوهای نوا به صورت اتوماتیک بر اساس منابع تعریف شده ایجاد میشن. برای سفارشی سازی منوها میتونیم از کلاس `NovaServiceProvider` استفاده کنیم
namespace App\Providers; use Laravel\Nova\Nova; use Illuminate\Support\Facades\Gate; use Laravel\Nova\NovaApplicationServiceProvider; class NovaServiceProvider extends NovaApplicationServiceProvider{ public function boot(){ parent::boot(); Nova::navigation(function (Request $request) { return [ MenuItem::resource(\App\Nova\User::class), MenuItem::resource(\App\Nova\Project::class), // سایر منوها ]; }); } }
خلاصه که با استفاده از این بخشها، میتونید نمای منابع خود را در داشبورد Laravel Nova سفارشی کنید و به کاربر امکان انجام عملیاتهای گوناگون رو بدین.