"zizaco/confide": "[email protected]" 및 "zizaco/entrust": "1.2.*@dev"을 사용 중입니다.시드 데이터베이스 - [ErrorException] 비 객체의 속성을 가져 오려고 시도 중
두 개의 자습서 (마이그레이션 동의)에서 설명한대로 모든 것을 설정했습니다. 또한, 내가 만든 다음 모델 :
사용자 :
<?php
use Zizaco\Confide\ConfideUser;
use Zizaco\Confide\Confide;
use Zizaco\Confide\ConfideEloquentRepository;
use Zizaco\Entrust\HasRole;
use Carbon\Carbon;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface{
use ConfideUser;
use HasRole;
/**
* Get user by username
* @param $username
* @return mixed
*/
public function getUserByUsername($username)
{
return $this->where('username', '=', $username)->first();
}
public function joined()
{
return String::date(Carbon::createFromFormat('Y-n-j G:i:s', $this->created_at));
}
public function saveRoles($inputRoles)
{
if(! empty($inputRoles)) {
$this->roles()->sync($inputRoles);
} else {
$this->roles()->detach();
}
}
public function currentRoleIds()
{
$roles = $this->roles;
$roleIds = false;
if(!empty($roles)) {
$roleIds = array();
foreach($roles as &$role)
{
$roleIds[] = $role->id;
}
}
return $roleIds;
}
public static function checkAuthAndRedirect($redirect, $ifValid=false)
{
// Get the user information
$user = Auth::user();
$redirectTo = false;
if(empty($user->id) && ! $ifValid) // Not logged in redirect, set session.
{
Session::put('loginRedirect', $redirect);
$redirectTo = Redirect::to('user/login')
->with('notice', Lang::get('user/user.login_first'));
}
elseif(!empty($user->id) && $ifValid) // Valid user, we want to redirect.
{
$redirectTo = Redirect::to($redirect);
}
return array($user, $redirectTo);
}
public function currentUser()
{
return (new Confide(new ConfideEloquentRepository()))->user();
}
public function getReminderEmail()
{
return $this->email;
}
}
역할 :
<?php
use Zizaco\Entrust\EntrustRole;
class Role extends EntrustRole {
public function validateRoles(array $roles)
{
$user = Confide::user();
$roleValidation = new stdClass();
foreach($roles as $role)
{
// Make sure theres a valid user, then check role.
$roleValidation->$role = (empty($user) ? false : $user->hasRole($role));
}
return $roleValidation;
}
}
권한 :
<?php
use Zizaco\Entrust\EntrustPermission;
class Permission extends EntrustPermission
{
public function preparePermissionsForDisplay($permissions)
{
// Get all the available permissions
$availablePermissions = $this->all()->toArray();
foreach($permissions as &$permission) {
array_walk($availablePermissions, function(&$value) use(&$permission){
if($permission->name == $value['name']) {
$value['checked'] = true;
}
});
}
return $availablePermissions;
}
/**
* Convert from input array to savable array.
* @param $permissions
* @return array
*/
public function preparePermissionsForSave($permissions)
{
$availablePermissions = $this->all()->toArray();
$preparedPermissions = array();
foreach($permissions as $permission => $value)
{
// If checkbox is selected
if($value == '1')
{
// If permission exists
array_walk($availablePermissions, function(&$value) use($permission, &$preparedPermissions){
if($permission == (int)$value['id']) {
$preparedPermissions[] = $permission;
}
});
}
}
return $preparedPermissions;
}
}
또한, 처음부터 데이터베이스에 값을 넣고 싶습니다. 따라서 사용자, 역할 및 권한을 위해 여러 가지 시드를 작성했습니다. 그러나, 나는 내 허락 시더에 오류가 발생합니다 :
UserTableSeeder :
<?php
class UsersTableSeeder extends Seeder {
public function run()
{
DB::table('users')->delete();
$users = array(
array(
'username' => 'admin',
'email' => '[email protected]',
'password' => Hash::make('admin'),
'confirmed' => 1,
'confirmation_code' => md5(microtime().Config::get('app.key')),
'created_at' => new DateTime,
'updated_at' => new DateTime,
),
array(
'username' => 'moderator',
'email' => '[email protected]',
'password' => Hash::make('moderator'),
'confirmed' => 1,
'confirmation_code' => md5(microtime().Config::get('app.key')),
'created_at' => new DateTime,
'updated_at' => new DateTime,
),
array(
'username' => 'user',
'email' => '[email protected]',
'password' => Hash::make('user'),
'confirmed' => 1,
'confirmation_code' => md5(microtime().Config::get('app.key')),
'created_at' => new DateTime,
'updated_at' => new DateTime,
)
);
DB::table('users')->insert($users);
}
}
RolesTableSeeder :
<?php
class RolesTableSeeder extends Seeder {
public function run()
{
DB::table('roles')->delete();
$adminRole = new Role;
$adminRole->name = 'adminRole';
$adminRole->save();
$standRole = new Role;
$standRole->name = 'userRole';
$standRole->save();
$modRole = new Role;
$modRole->name = 'modRole';
$modRole->save();
$user = User::where('username','=','admin')->first();
$user->attachRole($adminRole);
$user = User::where('username','=','user')->first();
$user->attachRole($standRole);
$user = User::where('username','=','moderator')->first();
$user->attachRole($modRole);
}
}
PermissionsTableSeeder :
<?php
class PermissionsTableSeeder extends Seeder {
public function run()
{
DB::table('permissions')->delete();
$permissions = array(
array(// 1
'name' => 'manage_users',
'display_name' => 'manage users'
),
array(// 2
'name' => 'manage_roles',
'display_name' => 'manage roles'
),
array(// 3
'name' => 'standart_user_role',
'display_name' => 'standart_user_role'
),
);
DB::table('permissions')->insert($permissions);
DB::table('permission_role')->delete();
$role_id_admin = Role::where('name', '=', 'admin')->first()->id;
$role_id_mod = Role::where('name', '=', 'moderator')->first()->id;
$role_id_stand = Role::where('name', '=', 'user')->first()->id;
$permission_base = (int)DB::table('permissions')->first()->id - 1;
$permissions = array(
array(
'role_id' => $role_id_admin,
'permission_id' => $permission_base + 1
),
array(
'role_id' => $role_id_admin,
'permission_id' => $permission_base + 2
),
array(
'role_id' => $role_id_mod,
'permission_id' => $permission_base + 1
),
array(
'role_id' => $role_id_mod,
'permission_id' => $permission_base + 3
),
array(
'role_id' => $role_id_stand,
'permission_id' => $permission_base + 3
),
);
DB::table('permission_role')->insert($permissions);
}
}
,
이것은 내가 오류가 때 db:seed
을 실행 :
$ php artisan db:seed
**************************************
* Application In Production! *
**************************************
Do you really wish to run this command? Y
Seeded: UsersTableSeeder
Seeded: RolesTableSeeder
[ErrorException]
Trying to get property of non-object
db:seed [--class[="..."]] [--database[="..."]] [--force]
모든 권고 내 파종 잘못 뭐하는 거지?
답변 해 주셔서 감사합니다. 당신은 id
을하고 싶지만 그러한 기록이 없습니다 당신이 오류 때문에 존재하지
$role_id_admin = Role::where('name', '=', 'admin')->first()->id;
$role_id_mod = Role::where('name', '=', 'moderator')->first()->id;
$role_id_stand = Role::where('name', '=', 'user')->first()->id;
:
실행중인 시드 자 클래스와 시드를 포함해야합니다. 이제 우리는'RolesTableSeeder' 뒤에 무엇이 나올지 모른다. –
@ MarcinNabiałek 나는 내 질문을 업데이트했다! – mrquad