بقراءة متمعنة للخطأ الظاهر نجده يشير الى خطأ بسياق اللغة فهو لم يتوقع ادراج المتغير الذي اسمه $admin و الجائز في اللغة أن يعرف اما ثابت const أو دالة function : أي كلاس class و بداخله دوال methods و بداخل هاته الدوال يكون الكود و الlogic لا خارجها
فالتخلص من هاته المشكلة بسيط و هو باضافة هذا الكود :
$admin = new Role();
$admin->name = 'admin';
$admin->display_name = 'Project Admin';
$admin->description = 'admin is the owner of a project';
$admin->save();
الى داخل دالة معينة ننشئها . لكن هذا قد يحل المشكلة لكنه لن يجعل الباكاج تعمل بشكل صحيح و لربما قد يضيف مشاكل اخرى
فالحل هو :
بعدما قمنا بانشاء كلاس باسم Role الان نحتاج الى انشاء ادوار , أي انشاء نماذج من هذا الكلاس فالأصح ليس استعمال الكود السابق داخل الكلاس , بل استعمالها في أي مكان ثان غير داخل هذا الكلاس حتى يكون سهل الوصول و قابل للاستنتساخ منه .
فالان أنت قد قمت بعمل الكلاس , وقد قمت بتوريثه دوال معينة باستعمال extends و لا تحتاج الى تعريف دوال اخرى , فتحتاج فقط الى انشاء هاته النماذج
و عن نفسي احبذ انشاءها داخل ملف التهجير الخاص بالمستخدمين بدالة خاصة يتم استدعاءها قبل انشاء المستخدم الافتراضي أو السوبر ادمن ومن ثم اعطاء الدور له .
فيكون ملف Role.php هكذا :
<?php
namespace App;
use Zizaco\Entrust\EntrustRole;
class Role extends EntrustRole
{
//
}
و يكون ملف التهجير الخاص بالمستخدمين هكذا :
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Hash;
use App\Role; // لا تنسى تضمين الكلاس بشكل صحيح
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
// استدعاء الدالة التي تقوم بانشاء الادوار الافتراضية
$adminRole = $this->createeSuperAdminRole();
// انشاء العضو الافتراضي او السوبر ادمن
$user = App\Models\User::create([
'name'=>'SuperAdmin',
'email'=>'super@admin.co',
'password' => Hash::make('12345678'),
]);
// اضافة الدور للعضو
$user->attachRole($adminRole);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
private function createeSuperAdminRole()
{
$admin = new Role();
$admin->name = 'admin';
$admin->display_name = 'Project Admin';
$admin->description = 'admin is the owner of a project';
$admin->save();
return $admin; // نقوم باعادته حتى يسهل اعطاء العضو الافتراضي هذا الدور
}
}
و يمكنك معاملة الاذونات و الملف باسم Permission.php بنفس المنطق و انشاء الاذونات واضافتها للادوار بمنطق مشابه