Dolgozom egy olyan kódon, amelyben az adminisztrátornak kell regisztrálnia a felhasználókat, és szerepeket rendelnie hozzájuk. Sikerült kitalálnom a kódot az űrlapadatok gyűjtéséhez, a felhasználók regisztrálásához az adatbázisban, de a DbManager meghívásának utolsó lépése a szerepek kiosztásához sikertelen. A kódjaim alább láthatók;
Íme a actionCreate()
függvény:
public function actionCreate()
{
$model = new Staff();
if ($model->load(Yii::$app->request->post()) && $model->signup()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
Itt van a Staff()
modell regisztrációs funkciója
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new Admin();
$user->username = $this->username;
$user->email = $this->email;
$user->setPassword($this->password);
$user->generateAuthKey();
$user->first_name = $this->first_name;
$user->last_name = $this->last_name;
$user->mobile = $this->mobile;
$user->station_id = $this->station_id;
if($user->save()) {
$p_key = $user->getPrimaryKey();
$r=new DbManager;
// $r->init();
if($this->role == 1) {
$role = 'courier';
$r->assign($role, $p_key); //(userId, role)
}
else if($this->role == 2) {
$role = 'tickets_officer';
$r->assign($role, $p_key); //(userId, role)
}
else if($this->role == 3) {
$role = 'supervisor';
$r->assign($role, $p_key); //(userId, role)
}
}
return $p_key;
}
A következő hibaüzenetet kapom: PHP Notice – yii\base\ErrorException
Trying to get property of non-object
public function assign($role, $userId)
{
$assignment = new Assignment([
'userId' => $userId,
'roleName' => $role->name,
'createdAt' => time(),
]);
$this->db->createCommand()
->insert($this->assignmentTable, [
'user_id' => $assignment->userId,
'item_name' => $assignment->roleName,
'created_at' => $assignment->createdAt,
])->execute();
A fenti hibakódban a 'roleName' => $role->name,
jelű sor alá van húzva, ami azt jelenti, hogy itt van a probléma.
Ne feledje, hogy a szerepeimet egy legördülő menüből kapom meg, ahol az eladások értéke 1, 2 vagy 3.