Здравствуйте.
Проблема ввела в ступор.
Сделал простенькую регистрацию для проекта.
Но не идет запись имени пользователя и его пароль не запоминается, но id в БД создается новый.
Код контроллера:
public function actionSignup(){
if (!Yii::$app->user->isGuest){
return $this->goHome();
}
$model = new SignupForm();
if($model->load(\Yii::$app->request->post()) && $model->validate()){
$user = new User();
$user->username = $model->username;
$user->password = \Yii::$app->security->generatePasswordHash($model->password);
if($user->save()){
return $this->goHome();
}
}
return $this->render('signup',compact('model'));
}
Код модели:
class SignupForm extends Model{
public $username;
public $password;
public function rules()
{
return [
[['username','password'],'required', 'message'=>'Заполните поле'],
];
}
public function attributes()
{
return [
'username' => 'Логин',
'password' => 'Пароль',
];
}
}
Код вьюшки:
<?php
/**
* Created by PhpStorm.
* User: sharavin
* Date: 28.07.2017
* Time: 16:33
*/
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<?php $form = ActiveForm::begin() ?>
<?= $form->field($model, 'username') ?>
<?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group">
<div>
<?= Html::submitButton('Регистрация', ['class' => 'btn btn-success']) ?>
</div>
</div>
<?php ActiveForm::end() ?>
Вот почему такое может быть?
Бд работает, подключена.
Код модели User:
<?php
namespace app\models;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;
class User extends ActiveRecord implements IdentityInterface
{
public $id;
public $username;
public $password;
public $authKey;
public $accessToken;
private static $users = [
'100' => [
'id' => '100',
'username' => 'admin',
'password' => 'admin',
'authKey' => 'test100key',
'accessToken' => '100-token',
],
'101' => [
'id' => '101',
'username' => 'demo',
'password' => 'demo',
'authKey' => 'test101key',
'accessToken' => '101-token',
],
];
/**
* @inheritdoc
*/
public static function findIdentity($id)
{
return isset(self::$users[$id]) ? new static(self::$users[$id]) : null;
}
/**
* @inheritdoc
*/
public static function findIdentityByAccessToken($token, $type = null)
{
foreach (self::$users as $user) {
if ($user['accessToken'] === $token) {
return new static($user);
}
}
return null;
}
/**
* Finds user by username
*
* @param string $username
* @return static|null
*/
public static function findByUsername($username)
{
foreach (self::$users as $user) {
if (strcasecmp($user['username'], $username) === 0) {
return new static($user);
}
}
return null;
}
/**
* @inheritdoc
*/
public function getId()
{
return $this->id;
}
/**
* @inheritdoc
*/
public function getAuthKey()
{
return $this->authKey;
}
/**
* @inheritdoc
*/
public function validateAuthKey($authKey)
{
return $this->authKey === $authKey;
}
/**
* Validates password
*
* @param string $password password to validate
* @return bool if password provided is valid for current user
*/
public function validatePassword($password)
{
return $this->password === $password;
}
}
Ваша проблема в том, что Yii не знает, что нужно делать с полями $username и $password. Для того чтобы поля обрабатывались нужно определить метод rules()
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'username'], 'string', 'max' => 255],
];
}
Также приведённая вами модель User, предназначена для работы с вашим массивом $users. Для того, чтобы полностью воспользоваться базой данных, нужно: убрать массив $users и изменить методы findIdentity, findIdentityByAccessToken, findByUsername. Пример здесь
Добавьте код модели User
P.S. У расширенной версии форма регистрации идет по умолчанию, возьмите ёё
код для примера
Скорее всего из-за того, что rules() в модели user не прописана
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Есть форма которая отправляется POST ajaxКак проверить отправилась ли форма по jq