2016-08-18 23:52:52 3225次浏览 5条回答 0 悬赏 30 金钱

AR类

<?php

namespace app\models;

use Yii;
use yii\db\ActiveRecord;

class RegistForm extends ActiveRecord
{
    
    public $password_repeat;

    public static function tableName()
    {
        return 'user';
    }
    
    public function rules()
    {
        return [
            [['username','password','password_repeat'], 'required', 'message' => '填写内容不能为空'],
            ['password','compare']
        ];
    }

    public function attributeLabels()
    {
        return [
            'username' => '用户名',
            'password' => '重复密码',
            'password_repeat' => '密码'
        ];
    }
}

控制器中的方法

public function actionRegist()
    {
        $model = new RegistForm();
        if ($model->load(Yii::$app->request->post())) {
            $model->password = Yii::$app->getSecurity()->generatePasswordHash($model->password);
            if ($model->save()) {
                $this->redirect(['login', 'msg' => '注册成功!']);
            }
        } else {
            return $this->render('regist', ['model' => $model]);   
        }
    }
补充于 2016-08-19 22:32

好吧,问题已解决,是因为save的过程中还要经过一次validate,然而我的密码已经哈希了,跟再次输入的密码配对不上,所以无法插入,顺道给大家说下,$model->getErrors()才是查出错误的办法。感谢大家的回答,本帖终结

  • 回答于 2016-08-19 09:54 举报

    你数据库的user表的数据结构是怎样的啊

    1 条回复
    回复于 2016-08-19 10:43 回复

    $model->save(),是可以成功加入数据的,只要我对post过来的数据做下修改,都无法插入数据库,现在上班给不了表的数据结构

  • 回答于 2016-08-19 10:15 举报

    给出信息太少,不能判断

    1 条回复
    回复于 2016-08-19 10:45 回复

    直接$model->save()是可以成功插入,只要对数据进行修改就无法插入了,话说能显示save()失败的错误不?

  • 回答于 2016-08-19 10:28 举报

    可以将post过来的数据var_dump()下,查看类型是否与数据库结构一致。

    1 条回复
    回复于 2016-08-19 10:41 回复

    返回值的_attributes 都是有值得 = =!如果直接使用$model->save(),不经过任何修改是可以插入数据库的

  • 回答于 2016-08-19 10:53 举报

    print_r($model->errors);

    8 条回复
    回复于 2016-08-19 10:58 回复

    errors 为 null。。。。就是插入不进去。。奇怪

    回复于 2016-08-19 14:26 回复

    model->load() 你看错了没。。。一般save 有误 会报错的。

    回复于 2016-08-19 14:43 回复

    model->load()没有错,就是我load之后就save的话,数据是能正常插入数据库。但是假如我对任何的字段进行修改的话,就save失败

    回复于 2016-08-19 14:50 回复

    数据库字段和程序类属性是相对应的 你要是改的话要一起改。。另外。你如果要是问的话。报错贴出来。改动那里。不是更好。

    回复于 2016-08-19 14:52 回复

    密码再次加密 好像yii 里有做限制。。要$2y开头吧。。你可以追下源码看看。

    回复于 2016-08-19 14:55 回复
    * @see generatePasswordHash()
     */
    public function validatePassword($password, $hash)
    {
        if (!is_string($password) || $password === '') {
            throw new InvalidParamException('Password must be a string and cannot be empty.');
        }
    
        if (!preg_match('/^\$2[axy]\$(\d\d)\$[\.\/0-9A-Za-z]{22}/', $hash, $matches)
            || $matches[1] < 4
            || $matches[1] > 30
        ) {
            throw new InvalidParamException('Hash is invalid.');
        }
    

    你查下这下方法。。

    回复于 2016-08-19 17:08 回复

    纳闷是没有报错,就是save 返回了 false,字段应该是没错,都是password

    回复于 2016-08-19 22:14 回复


    object(app\models\RegistForm)[60]
    public 'password_repeat' => string '123' (length=3)
    private '_attributes' (yii\db\BaseActiveRecord) =>

    array (size=2)
      'username' => string 'uer' (length=3)
      'password' => string '$2y$13$94VOHsmS3IXYFaV2qFoelubuIti9Ifzj2SfRBkUp7bW7gteCH6.Rq' (length=60)
    

    private '_oldAttributes' (yii\db\BaseActiveRecord) => null
    private '_related' (yii\db\BaseActiveRecord) =>

    array (size=0)
      empty
    

    private '_errors' (yii\base\Model) => null
    private '_validators' (yii\base\Model) =>

    object(ArrayObject)[61]
      private 'storage' => 
        array (size=2)
          0 => 
            object(yii\validators\RequiredValidator)[64]
              ...
          1 => 
            object(yii\validators\CompareValidator)[66]
              ...
    

    private '_scenario' (yii\base\Model) => string 'default' (length=7)
    private '_events' (yii\base\Component) =>

    array (size=0)
      empty
    

    private '_behaviors' (yii\base\Component) =>

    array (size=0)
    
  • 回答于 2016-08-19 14:51 举报

    一般情况下,load后的数据不符合。建议开启调试,看一下log具体是什么。

您需要登录后才可以回答。登录 | 立即注册
vVvlife
主管

vVvlife 东莞

注册时间:2016-03-19
最后登录:2016-10-07
在线时长:8小时38分
  • 粉丝1
  • 金钱700
  • 威望0
  • 积分780

热门问题