У меня проблема с установщиком yii2, у меня есть поле, называемое «роль» из другой таблицы, которое пользователи и роли связаны с user_id в таблице «user_role», поиск работы с геттерами, но сеттер не работает, yii2 не вызывает функцию setter! , я пробовал слишком много вещей, но поле «роль» в «правилах» функционировало как безопасное, но это не помогло, я написал $ role как общедоступную переменную в классе пользователя, и я попробовал ее как конфиденциальную, но также не работа, я не могу понять, где ошибка!Yii2 setter не работает
class User extends BaseUser
{
public $givenname;
public static function tableName()
{
return 'user';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['role'], 'safe'],
];
}
public function getRole()
{
$sql = 'SELECT item_name FROM "user_rules" WHERE user_id = :userId';
$command = Yii::$app->db->createCommand($sql);
$command->bindValue(':userId', (int)$this->id, PDO::PARAM_INT);
return $command->queryScalar();
}
public function setRole($newRole)
{
die("SetRole has been called now ");
// Save role in the DB
.................
}
/**
* @return type array list of the system roles
*/
public static function getSystemRoles()
{
return array(
'sysadmin' => 'sysadmin',
'admin' => 'admin',
'editor' => 'editor',
'member' => 'member',
'register' => 'register'
);
}
и в моем контроллере здесь это действие обновление:
/**
* Updates an existing User model.
* @param integer $id
* @return mixed
*/
public function actionUpdate($id)
{
Url::remember('', 'actions-redirect');
$user = $this->findModel($id);
$user->scenario = 'update';
$this->performAjaxValidation($user);
if ($user->load(Yii::$app->request->post()) && $user->save()) {
Yii::$app->getSession()->setFlash('success', Yii::t('user', 'Account details have been updated'));
return $this->refresh();
}
return $this->render('_account', [
'user' => $user,
]);
}
//--------------------------
и в моем файле представления:
<?= $form->field($user, 'role')->dropDownList(User::getSystemRoles(), ['class' => 'form-control col-sm-2']); ?>
у вас есть какие-либо идеи? не могли бы вы мне помочь.
Привет Ваель метод
Спасибо за ваш ответ, но я не actully решить мою проблему .. я понял, что я Шоуда overwirte сценарии() функцию и изменить обновление ... поэтому я добавить $ newScenario = [» update '=> [' username ',' email ',' password ',' userrole ']]; Тогда я обнаружил, что я не должен использовать имя пользователя (роли) для моей переменной, потому что это может быть зарезервировано для Yii. Но в любом случае спасибо за вашу помощь. – Wael