تا این درس ما با نحوه ساخت کنترلرها، مسیردهی و viewها در پکیجهای لاراول آشنا شدیم. حالا به کد پروژه لاراولی برمیگردیم و کدهای داخل permission editor که ساختیم را کپی پوشه پکیج میکنیم. فقط نیاز هست حتما namespace ها را تغییر دهیم.
برای مثال کد زیر کنترلر کامل RoleController میباشد:
packages/themahdavi/laravel-permission-editor/src/Http/Controllers/RoleController.php:
namespace themahdavi\LaravelPermissionEditor\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
class RoleController extends Controller
{
public function index()
{
$roles = Role::withCount('permissions')->get();
return view('permission-editor::roles.index', compact('roles'));
}
public function create()
{
$permissions = Permission::pluck('name', 'id');
return view('permission-editor::roles.create', compact('permissions'));
}
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'unique:roles'],
'permissions' => ['array'],
]);
$role = Role::create(['name' => $request->input('name')]);
$role->givePermissionTo($request->input('permissions'));
return redirect()->route('permission-editor.roles.index');
}
public function edit(Role $role)
{
$permissions = Permission::pluck('name', 'id');
return view('permission-editor::roles.edit', compact('role', 'permissions'));
}
public function update(Request $request, Role $role)
{
$request->validate([
'name' => ['required', 'string', 'unique:roles,name,' . $role->id],
'permissions' => ['array'],
]);
$role->update(['name' => $request->input('name')]);
$role->syncPermissions($request->input('permissions'));
return redirect()->route('permission-editor.roles.index');
}
public function destroy(Role $role)
{
$role->delete();
return redirect()->route('permission-editor.roles.index');
}
}
در نهایت نیاز هست تمام فایلهای داخل پوشههای کنترلر و views را داخل پوشه پکیج کپی کنیم. برای اینکه کدها اینجا زیاد نشود مثالها در نهایت روی ریپازیتوری خواهیم داشت.
حالا اگه پروژه را دوباره باز کنیم به خطای زیر مواجه خواهیم شد:
Class "Spatie\Permission\Models\Permission" not found
البته این خطا بدان معنا نیست که پروژه لاراولی ما متوجه شده است که پکیج موردنظر وجود ندارد و باید نصب شود. در حقیقت خطا نشانگر آن است که لاراول کلاس را پیدا نمیکند.
پس حالا نوبت آن رسیده تا به composer.json
پکیج برگردیم و پکیج Spatie را در وابستگیها بیافزاییم.
{
"name": "themahdavi/laravel-permission-editor",
// ...
"require": {
"spatie/laravel-permission": "^5.0"
}
}
برای اینکه نسخه پکیج با پروژه شما همخوانی داشته باشد باید به نسخهای که وارد میکنید دقت کنید. در زمان نگارش این درسنامه آخرین نسخه پکیج spatie/laravel-permission
نسخه 5.x
است.
حالا وقت آن شده تا دستور composer update
را اجرا کنیم. این دستور علاوه بر وابستگیهای پکیج ما، وابستگیهای پروژه لاراول هم بروزآوری میکند.
اگر در ترمینال نتایج زیر را خروجی بگیریم یعنی تا اینجا درست پیش رفتیم:
Package operations: 1 install, 1 update, 0 removals
- Installing spatie/laravel-permission (5.7.0): Extracting archive
- Upgrading themahdavi/laravel-permission-editor (dev-main a066e56 => dev-main 274d508): Source already present
حالا اگر مرورگر را رفرش کنیم با خطای زیر مواجه خواهیم شد:
Base table or view not found: 1146 Table 'permissions' doesn't exist
این خطا به ما یادآور میکند که تنها نصب پکیج spatie/laravel-permission
کافی نیست و نیاز هست تا تنظیمات آن انجام شود. برای اطلاعات بیشتر به مستندات رسمی آن مراجعه کنید زیرا در چارچوب این درسنامه مطالعه مستندات پکیج موردنظر قرار نمیگیرد. برای نمونه دستورات زیر باید پس از نصب پکیج spatie/laravel-permission
نیاز است.
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate
توجه: مشابه مثال این درسنامه اگر پکیجی توسعه میدهید که درون آن دارای وابستگی به پکیجهای دیگری است حتما باید در یاد داشته باشید هنگام ساخت فایل راهنما Readme دقت کنید دستورات اضافی ضروری وابستگیها را به دستورات مورد نیازی که برای راه اندازی پکیج شما نیاز است، اضافه کنید.
حالا اگر صفحه مرورگر را رفرش کنیم تصویر زیر را خواهیم دید:
تا اینجا ما جدول و فرم ایجاد نقش جدید را داریم. همچنین فعلا خبری از ظاهر و استایلها نیست. در درس بعدی سراغ افزودن styles خواهیم کرد.
توجه: اگر بعد از هربار رفرش، اطلاعات صفحه بروز نشدند حتما دستور php artisan view:clear
را اجرا کنید تا کش صفحات پاک شوند.
375 کلمه
440 کلمه
190 کلمه
365 کلمه
268 کلمه
191 کلمه
570 کلمه
349 کلمه
1 کلمه
1 کلمه
1 کلمه
1 کلمه