2017-09-22 15:52:29 3180次浏览 5条回答 0 悬赏 15 金钱
/**
 * 注册
 *
 * @return bool
 */
public function userReg()
{

    $Cls = new User();

    $Cls->user_id = time() . '_' . rand(0, 999);
    $Cls->username = $this->username;
    $Cls->password = $Cls->setPassword($this->password);
    $Cls->nickname = $this->nickname;
    $Cls->telphone = $this->telphone;
    $Cls->grade = 4;

    // 生成 "remember me" 认证key
    $Cls->generateAuthKey();

    if (!$Cls->save(false)) {
        return false;
    }

    return $Cls;
}

LoginForm,表单里面的函数

/**
 * 注册
 */
public function actionReg()
{

    $model = new LoginForm();

    $model->scenario = 'reg';

    if (Yii::$app->request->isAjax) {

        if (!$model->load(Yii::$app->request->post())) {
            return Json::encode(['msg' => '提交内容有误 !!']);
        }

        // 验证失败
        if (!$model->validate()) {
            return Json::encode($model->getErrors());
        }

        if (!($user = $model->userReg())) {
            return Json::encode(['msg' => '注册失败,请检查 !!']);
        }

        if (!Yii::$app->getUser()->login($user, (3600 * 24 * 30))) {
            return Json::encode(['msg' => '注册用户异常 !!']);
        }

        return Json::encode(['msg' => '注册成功 !!', 'status' => true]);
    }

    return $this->render('../center/reg', ['model' => $model]);
}

控制器里面的注册函数

奇怪的是我可以插入数据,但是插入的数据均为空白,我查过数据是有的,到save哪里不知道干嘛就成空白了..求指教...

补充于 2017-09-22 16:03

INSERT INTO F_user (id) VALUES (DEFAULT)

看调试的时候,出现这个...

补充于 2017-09-22 16:16

`
namespace app\models;

use Yii;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;

class User extends ActiveRecord implements IdentityInterface
{

public $user_id;
public $username;
public $password;
public $nickname;
public $telphone;
public $grade;
public $auth_key;
public $accessToken;

public static function tableName()
{
    return '{{%user}}';
}

/**
 * @inheritdoc
 */
public static function findIdentity($id)
{
    return static::findOne(['id' => $id]);
}

/**
 * @inheritdoc
 */
public static function findIdentityByAccessToken($token, $type = null)
{
    throw new NotSupportedException('"findIdentityByAccessToken" is not implemented.');
}

/**
 * Finds user by username
 *
 * @param string $username
 * @return static|null
 */
public static function findByUsername($username)
{
    return static::find()->where(['username' => $username]);
}

/**
 * @inheritdoc
 */
public function getId()
{
    return $this->id;
}

/**
 * @inheritdoc
 */
public function getAuthKey()
{
    return $this->auth_key;
}

/**
 * @inheritdoc
 */
public function validateAuthKey($authKey)
{
    return $this->authKey === $authKey;
}

/**
 * Validates password
 *
 * @param string $password password to validate
 * @return boolean if password provided is valid for current user
 */
public function validatePassword($password)
{
    return Yii::$app->security->validatePassword($password, $this->password);
}

/**
 * 生成 "remember me" 认证key
 */
public function generateAuthKey()
{
    $this->auth_key = Yii::$app->security->generateRandomString();
}

/**
 * 为model的password_hash字段生成密码的hash值
 *
 * @param string $password
 */
public function setPassword($password)
{
    return Yii::$app->security->generatePasswordHash($password);
}

/**
 * 用户列表
 *
 * @return $this
 */
public function view()
{
    return static::find()->Where(['is_using' => 'On']);
}

}
`

我的用户模型

  • 回答于 2017-09-22 16:12 举报

    检查User对象是否设置了场景scenarios

    1 条回复
    回复于 2017-09-22 16:15 回复

    User 是模型来的,设置不了吧?

  • 回答于 2017-09-22 16:30 举报

    没有rule规则吗?
    赋值之后打印
    $Cls看看有没有数据;
    $Cls->save(false)//意思是不走rule验证规则?

    1 条回复
    回复于 2017-09-22 17:01 回复

    rule规则放在了表单模型那边,打印过出来,都是有数据的

  • 回答于 2017-09-22 19:48 举报

    你声明的public属性,不要跟数据库中的重复,例如你数据库user表中有个“username”属性,那么在User中就不要在声明$username了

    3 条回复
    回复于 2017-09-23 08:42 回复

    不声明会出错啊..

    回复于 2017-09-23 09:30 回复

    怎么出错了?你实现rules和attribute了么

    回复于 2017-09-24 08:50 回复

    实现了..所以说好神奇

  • 回答于 2017-09-25 09:10 举报

    你这些属性定义在注册模型里,rules里进行相关的规定;还有你这一手loginform当注册表单我也服了

  • 回答于 2018-01-18 18:55 举报

    我解决了,把模型的成员变量变成私有的就行了。
    private $user_id;
    private $username;
    private $password;
    private $nickname;
    private $telphone;
    private $grade;
    private $auth_key;
    private $accessToken;
    就行了~
    试出来的,原因未找到,汗~

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

yixianliu2 广东深圳

注册时间:2016-12-11
最后登录:2024-02-01
在线时长:11小时10分
  • 粉丝0
  • 金钱505
  • 威望0
  • 积分615

热门问题