['verifyCode', 'captcha']

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

При валидаторе ['verifyCode', 'captcha'] не сохраняется модель.
Как только отключаю, то все записывает.

Код: Выделить всё

    public function actionRegistration()
    {
        $model = new user();

        if ($model->load(Yii::$app->request->post())) {
            if ($model->validate())  {
                $model->save();
                    if($model->save()){echo 2;}else{echo 3;}//выдает 3
                
            }
        }

        return $this->render('user', [
            'model' => $model,
        ]);
    }

Код: Выделить всё

<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "User".
 *
 * @property integer $id
 * @property string $username
 * @property string $auth_key
 * @property string $password_hash
 * @property string $password_reset_token
 * @property string $email
 * @property integer $role
 * @property integer $status
 * @property integer $created_at
 * @property integer $updated_at
 * @public $verifyCode;
 */
class User extends \yii\db\ActiveRecord
{
    public $verifyCode;
    public static function tableName()
    {
        return 'User';
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['username', 'auth_key', 'password_hash', 'email'], 'required'],
            [['role', 'status', 'created_at', 'updated_at'], 'integer'],
            [['username', 'password_hash', 'password_reset_token', 'email'], 'string', 'max' => 255],
            [['auth_key'], 'string', 'max' => 32],
            //['verifyCode', 'captcha']
        ];
    }

    /**
     * @inheritdoc
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'username' => 'Логин',
            'auth_key' => 'Пароль',
            'password_hash' => 'Пароль повторим на всякий случай',
            'password_reset_token' => 'Password Reset Token',
            'email' => 'Мыло',
            'role' => 'Role',
            'status' => 'Status',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
            'verifyCode' => 'Код с картинки',
        ];
    }
}

Код: Выделить всё

<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\captcha\Captcha;
/* @var $this yii\web\View */
/* @var $model app\models\user */
/* @var $form ActiveForm */
?>
<div class="insex">

    <?php $form = ActiveForm::begin(); ?>

        <?= $form->field($model, 'username') ?>
        <?= $form->field($model, 'auth_key') ?>
        <?= $form->field($model, 'password_hash') ?>
        <?= $form->field($model, 'email') ?>
        <?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
        'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
    ]) ?>
        <div class="form-group">
            <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
        </div>
    <?php ActiveForm::end(); ?>

</div><!-- insex -->
Подскажите в чем может быть проблема?

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

Самое интересное, что <?php var_dump($_SESSION);?> выдает null, хотя в site/contact показывает капчу. Вот!

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

Как я понял, то у \yii\db\ActiveRecord нет капчи или оно не записывает ее в сессию, и мне надо наследоват модель от класса моделей, а потом написать метод save() который бы добавлял мне юзера в таблицу. Я правильно размышляю или это говнокод?

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

Как в модели записать в БД данные? Или написать функцию, которая бы записала ?

Код: Выделить всё

     public function save()
    {

        $username= $this->username;
        $auth_key = $this->auth_key;
        $password_hash= $this->password_hash;
        $email = $this->email;
        $role= 0;
        $created_at=date("Ymd");
        $link = mysqli_connect("localhost", "root", "", "yii");
        $insert = mysqli_multi_query($link,"INSERT INTO `yii`.`user` (`username`, `email`,`auth_key`) VALUES ('$username', '$email','$auth_key');");
        
    } 

Аватара пользователя
Faenir
Сообщения: 292
Зарегистрирован: 2010.01.06, 01:46
Откуда: Симферополь

Re: ['verifyCode', 'captcha']

Сообщение Faenir »

Код: Выделить всё

if ($model->load(Yii::$app->request->post())) {
            if ($model->validate())  {
                $model->save();
                    if($model->save()){echo 2;}else{echo 3;}//выдает 3
                
            }
        }
У вас 3 раза валидация проходит и 2 раза сохранение... зачем?
Проблема с каптчей изза повторной валидации. Первая валидация проходит, вторая уже нет.
Нужно просто

Код: Выделить всё

if ($model->load(Yii::$app->request->post()) && $model->save()) {           
    echo 2;                
} else {
    echo 3;
}

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

FOMINTIMUR писал(а):Как в модели записать в БД данные? Или написать функцию, которая бы записала ?

Код: Выделить всё

     public function save()
    {

        $username= $this->username;
        $auth_key = $this->auth_key;
        $password_hash= $this->password_hash;
        $email = $this->email;
        $role= 0;
        $created_at=date("Ymd");
        $link = mysqli_connect("localhost", "root", "", "yii");
        $insert = mysqli_multi_query($link,"INSERT INTO `yii`.`user` (`username`, `email`,`auth_key`) VALUES ('$username', '$email','$auth_key');");
        
    }
Да, спасибо. Правда с активрекордс у меня все же не получилось заставиить капчу работать. Вернее капча работает, но тогда save() не работает((

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ['verifyCode', 'captcha']

Сообщение zelenin »

FOMINTIMUR писал(а):Как в модели записать в БД данные? Или написать функцию, которая бы записала ?

Код: Выделить всё

     public function save()
    {

        $username= $this->username;
        $auth_key = $this->auth_key;
        $password_hash= $this->password_hash;
        $email = $this->email;
        $role= 0;
        $created_at=date("Ymd");
        $link = mysqli_connect("localhost", "root", "", "yii");
        $insert = mysqli_multi_query($link,"INSERT INTO `yii`.`user` (`username`, `email`,`auth_key`) VALUES ('$username', '$email','$auth_key');");
        
    }

это просто пять баллов.

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

zelenin писал(а):
FOMINTIMUR писал(а):Как в модели записать в БД данные? Или написать функцию, которая бы записала ?

Код: Выделить всё

     public function save()
    {

        $username= $this->username;
        $auth_key = $this->auth_key;
        $password_hash= $this->password_hash;
        $email = $this->email;
        $role= 0;
        $created_at=date("Ymd");
        $link = mysqli_connect("localhost", "root", "", "yii");
        $insert = mysqli_multi_query($link,"INSERT INTO `yii`.`user` (`username`, `email`,`auth_key`) VALUES ('$username', '$email','$auth_key');");
        
    } 

это просто пять баллов.
А как правильно, подскажите, я самоучка начинающий)) :D Как не пытался я работать с

Код: Выделить всё

$db->createCommand('INSERT INTO customer (name) VALUES (:name)', [
    ':name' => 'Qiang',
])->execute(); 
в моделе, ничего не выходит. Не находит он createCommand вроде

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ['verifyCode', 'captcha']

Сообщение zelenin »

правильно разобраться в чем у вас проблема. После validate() вставьте print_r($model->getErrors()); die(); и посомтрите какие ошибки вам покажет валидация.

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

zelenin писал(а):правильно разобраться в чем у вас проблема. После validate() вставьте print_r($model->getErrors()); die(); и посомтрите какие ошибки вам покажет валидация.
Спасибо большое :D

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: ['verifyCode', 'captcha']

Сообщение zelenin »

FOMINTIMUR писал(а):
zelenin писал(а):правильно разобраться в чем у вас проблема. После validate() вставьте print_r($model->getErrors()); die(); и посомтрите какие ошибки вам покажет валидация.
Спасибо большое :D
всем интересен итог - не хотим на те же грабли наступить.

FOMINTIMUR
Сообщения: 103
Зарегистрирован: 2014.01.05, 21:08

Re: ['verifyCode', 'captcha']

Сообщение FOMINTIMUR »

zelenin писал(а):
FOMINTIMUR писал(а):
zelenin писал(а):правильно разобраться в чем у вас проблема. После validate() вставьте print_r($model->getErrors()); die(); и посомтрите какие ошибки вам покажет валидация.
Спасибо большое :D
всем интересен итог - не хотим на те же грабли наступить.
Я поправил. Все заработало :D .Узнал о get_errors(). Сейчас вот beforeSave() буду смотреть. Не знаю что было изначально, но сейчас была валидация по незаполняемому полю.

Ответить