在yii2中的哪里放置beforesave函数,如何在控制器中访问

randawahyup

我想在我的应用程序中执行注册功能,如何使用yii2创建哈希密码。

这是我的user.php

<?php

namespace app\models;

use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\base\Security;
use yii\web\IdentityInterface;
/**
 * This is the model class for table "users".
 *
 * @property string $userid
 * @property string $username
 * @property string $password
 */

class User extends ActiveRecord  implements IdentityInterface
    {

        public static function tableName()
        {
            return 'users';
        }

        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                [['username', 'password', 'password_hash','auth_key', 'password_reset_token'], 'required'],
                [['username', 'password'], 'string', 'max' => 45],
                [['auth_key'], 'string', 'max' => 32],
                [['password_reset_token', 'password_hash'], 'string', 'max' => 255],
                [['username'], 'unique']
            ];
        }

        /**
         * @inheritdoc
         */
        public function attributeLabels()
        {
            return [
                'id' => 'ID',
                'username' => 'Username',
                'password' => 'Password',
                'password_hash' => 'Password hash',
                'auth_key' => 'Auth Key',
                'password_reset_token' => 'Password Reset Token',
            ];
        }    
        /** INCLUDE USER LOGIN VALIDATION FUNCTIONS**/
            /**
         * @inheritdoc
         */


        public static function findIdentity($id)
        {
            return static::findOne($id);
        }


        public static function findIdentityByAccessToken($token, $type = null)
        {
              return static::findOne(['access_token' => $token]);
        }


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

        /**
         * Finds user by password reset token
         *
         * @param  string      $token password reset token
         * @return static|null
         */
        public static function findByPasswordResetToken($token)
        {
            $expire = \Yii::$app->params['user.passwordResetTokenExpire'];
            $parts = explode('_', $token);
            $timestamp = (int) end($parts);
            if ($timestamp + $expire < time()) {
                // token expired
                return null;
            }

            return static::findOne([
                'password_reset_token' => $token
            ]);
        }

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

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

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

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

        /**
         * Generates password hash from password and sets it to the model
         *
         * @param string $password
         */
        public function setPassword($password)
        {
            $this->password_hash = Yii::$app->getSecurity()->generatePasswordHash($password);//Security::generatePasswordHash($password);
        }

        /**
         * Generates "remember me" authentication key
         */
        public function generateAuthKey()
        {
            $this->auth_key = Security::generateRandomKey();
        }

        /**
         * Generates new password reset token
         */
        public function generatePasswordResetToken()
        {
            $this->password_reset_token = Security::generateRandomKey() . '_' . time();
        }

        /**
         * Removes password reset token
         */
        public function removePasswordResetToken()
        {
            $this->password_reset_token = null;
        }

    }

这是我的UserController.php

public function actionCreate()
    {
$model = new User;
if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
}

我想在用户模型中使用setPassword函数,必须在其中放置beforesave函数,并且需要更改actionCreate函数?

感谢帮助。

阿罗加切夫

您应该将其放置在模型中,因为此方法位于中yii\db\BaseActiveRecord如官方文档中所述覆盖它:

/**
 * @inheritdoc
 */
public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        // Place your custom code here

        return true;
    } else {
        return false;
    }
}

官方文档:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在拒绝访问控制器后如何在Yii2中设置Flash消息

来自分类Dev

Yii2:如何在控制器中创建构造函数?

来自分类Dev

Yii2访问新控制器中的动作

来自分类Dev

如何禁用yii2中的链接以访问控制器

来自分类Dev

如何从 layout/main.php Yii2 中的控制器访问变量

来自分类Dev

如何在Yii2中更改访问控制器重定向/登录URL?

来自分类Dev

如何在Yii2中更改访问控制器重定向/登录URL?

来自分类Dev

如何在YII2中将参数从控制器传递到布局

来自分类Dev

如何在Yii2中更改所有控制器的默认布局?

来自分类Dev

如何在yii2中获取当前控制器

来自分类Dev

如何在yii2中覆盖控制器,模型,视图

来自分类Dev

如何在Yii2中更改控制器的默认视图?

来自分类Dev

如何在yii2中设置默认控制器

来自分类Dev

如何在YII2中使用PJAX处理来自控制器的错误?

来自分类Dev

如何在yii2中隐藏控制器名称和动作名称

来自分类Dev

如何在 Yii2 中的控制器中发送模型值

来自分类Dev

是否可以在yii2 PHP框架中私下访问控制器或操作ID

来自分类Dev

如何在yii2中将数据从控制器发送到另一个控制器

来自分类Dev

覆盖控制器中的Yii2 assetManager配置

来自分类Dev

Yii2在控制器中获取当前动作

来自分类Dev

覆盖控制器中的Yii2 assetManager配置

来自分类Dev

在yii2中更改状态的控制器动作

来自分类Dev

Yii2:在不同控制器中激活的菜单

来自分类Dev

在Yii2中扩展主控制器(或视图)

来自分类Dev

如何从yii2控制器中的两个表中删除数据

来自分类Dev

如何为yii2中的每个控制器方法创建afterAction?

来自分类Dev

Yii2如何从特定视图或控制器操作中包含多个CSS文件

来自分类Dev

如何从Yii中的模型访问控制器功能?

来自分类Dev

Yii2中模块的访问控制

Related 相关文章

  1. 1

    在拒绝访问控制器后如何在Yii2中设置Flash消息

  2. 2

    Yii2:如何在控制器中创建构造函数?

  3. 3

    Yii2访问新控制器中的动作

  4. 4

    如何禁用yii2中的链接以访问控制器

  5. 5

    如何从 layout/main.php Yii2 中的控制器访问变量

  6. 6

    如何在Yii2中更改访问控制器重定向/登录URL?

  7. 7

    如何在Yii2中更改访问控制器重定向/登录URL?

  8. 8

    如何在YII2中将参数从控制器传递到布局

  9. 9

    如何在Yii2中更改所有控制器的默认布局?

  10. 10

    如何在yii2中获取当前控制器

  11. 11

    如何在yii2中覆盖控制器,模型,视图

  12. 12

    如何在Yii2中更改控制器的默认视图?

  13. 13

    如何在yii2中设置默认控制器

  14. 14

    如何在YII2中使用PJAX处理来自控制器的错误?

  15. 15

    如何在yii2中隐藏控制器名称和动作名称

  16. 16

    如何在 Yii2 中的控制器中发送模型值

  17. 17

    是否可以在yii2 PHP框架中私下访问控制器或操作ID

  18. 18

    如何在yii2中将数据从控制器发送到另一个控制器

  19. 19

    覆盖控制器中的Yii2 assetManager配置

  20. 20

    Yii2在控制器中获取当前动作

  21. 21

    覆盖控制器中的Yii2 assetManager配置

  22. 22

    在yii2中更改状态的控制器动作

  23. 23

    Yii2:在不同控制器中激活的菜单

  24. 24

    在Yii2中扩展主控制器(或视图)

  25. 25

    如何从yii2控制器中的两个表中删除数据

  26. 26

    如何为yii2中的每个控制器方法创建afterAction?

  27. 27

    Yii2如何从特定视图或控制器操作中包含多个CSS文件

  28. 28

    如何从Yii中的模型访问控制器功能?

  29. 29

    Yii2中模块的访问控制

热门标签

归档