Не идет запись в дб с формы

261
01 августа 2017, 18:18

Здравствуйте.

Проблема ввела в ступор.

Сделал простенькую регистрацию для проекта.

Но не идет запись имени пользователя и его пароль не запоминается, но 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; 
    } 
}

Answer 1

Ваша проблема в том, что Yii не знает, что нужно делать с полями $username и $password. Для того чтобы поля обрабатывались нужно определить метод rules()

/**
 * @inheritdoc
 */
public function rules()
{
    return [
        [['id', 'username'], 'string', 'max' => 255],
    ];
}

Также приведённая вами модель User, предназначена для работы с вашим массивом $users. Для того, чтобы полностью воспользоваться базой данных, нужно: убрать массив $users и изменить методы findIdentity, findIdentityByAccessToken, findByUsername. Пример здесь

Answer 2

Добавьте код модели User P.S. У расширенной версии форма регистрации идет по умолчанию, возьмите ёё код для примера

Answer 3

Скорее всего из-за того, что rules() в модели user не прописана

READ ALSO
Проблемы с передачей JSON данных по Ajax

Проблемы с передачей JSON данных по Ajax

Если сразу к делу, то JS:

236
запуск php скрипта по кнопке

запуск php скрипта по кнопке

ЗдравствуйтеЕсть php скрипт в папке, update

290
Как проверить отправлен ли POST ajax

Как проверить отправлен ли POST ajax

Есть форма которая отправляется POST ajaxКак проверить отправилась ли форма по jq

291
Как загрузить файл на компьютер - URLDownloadToFile

Как загрузить файл на компьютер - URLDownloadToFile

Пробую загрузить файл на диск C:\\

284