• Yii2与layuiadmin整合1


    1.下载对应Yii2框架,这里以官方的基本应用程序模板

    composer create-project --prefer-dist yiisoft/yii2-app-basic yii2web

    2.配置站点

    3.开启伪静态在文件 中 添加开启 /config/web.php

    $config = [
        // 
        'components' => [
            // 
            'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'rules' => [
                ],
            ],
            // 

    4.建立数据库并配置数据库连接,修改文件  /config/db.php

    return [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=yii2web',
        'username' => 'root',
        'password' => 'root',
        'charset' => 'utf8',
    ];    

    以下建立文件时,如果目录不存在,则手动直接建立目录即可,
    主机为 http://yii2web.com

    5.通过命令方式分别建立以下模块功能 http://yii2web.com/gii/module
    users, orders, products, purchases, system

    // Module Class
    app\modules\users\Module
    
    // Module ID
    users
    
    // Module Class
    app\modules\orders\Module
    
    // Module ID
    orders
    
    // Module Class
    app\modules\products\Module
    
    // Module ID
    products
    
    // Module Class
    app\modules\purchases\Module
    
    // Module ID
    purchases
    
    // Module Class
    app\modules\system\Module
    
    // Module ID
    system

    6.在配置文件添加以上模块,修改文件 /config/web.php

    //
    $config = [
        'id' => 'basic',
        //
        // 添加模块
        'modules' => [
            'users' => [
                'class' => 'app\modules\users\Module',
            ],
            'orders' => [
                'class' => 'app\modules\orders\Module',
            ],
            'products' => [
                'class' => 'app\modules\products\Module',
            ],
            'purchases' => [
                'class' => 'app\modules\purchases\Module',
            ],
            'system' => [
                'class' => 'app\modules\system\Module',
            ],
        ],
    // 

    以上可以直接访问  http://yii2web.com/users/default/index

    7.加载layuiadmin,以 /layuiAdmin/admin/std/dist/下的文件为例
    复制整个目录layuiadmin及目录下的文件 到 /web/assets/

    8.建立前端配置文件 /assets/LayuiAsset.php

    <?php
    
    namespace app\assets;
    
    use yii\web\AssetBundle;
    
    class LayuiAsset extends AssetBundle
    {
        public $basePath = '@webroot';
        public $baseUrl = '@web';
    
        public $css = [
            'assets/layuiadmin/layui/css/layui.css',
            'assets/layuiadmin/style/admin.css',
            'assets/layuiadmin/style/login.css'
        ];
    
        public $js = [
            'assets/layuiadmin/layui/layui.js',
        ];
        
        public $jsOptions = ['position' => View::POS_HEAD,];
    
        public $depends = [];
    
        //定义按需加载JS方法,注意加载顺序在最后
        public static function addScript($view, $jsfile) {
            $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'app\assets\LayuiAsset']);
        }
    
        //定义按需加载css方法,注意加载顺序在最后
        public static function addCss($view, $cssfile) {
            $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'app\assets\LayuiAsset']);
        }
    }

    9.开发登陆页面
    这里以自带的模板为基本修改
    修改 文件 /controllers/SiteController.php,现在先开发测试,后面再一步步完善

    class SiteController extends Controller
    {
    //
        /**
         * Login action.
         *
         * @return Response|string
         */
        public function actionLogin()
        {
            $this->layout='empty';
            if (!Yii::$app->user->isGuest) {
                return $this->goHome();
            }
    
            $model = new LoginForm();
            if ($model->load(Yii::$app->request->post()) ) {
                var_dump(11);
                print_r(Yii::$app->request->post());
                exit();
            }
    
            $model->password = '';
    
            return $this->render('login', [
                'model' => $model,
            ]);
        

    10.新建上面的模板文件  /views/layouts/empty.php

    <?php
    
    /* @var $this \yii\web\View */
    /* @var $content string */
    use yii\helpers\Html;
    use app\assets\LayuiAsset;
    
    LayuiAsset::register($this);
    ?>
    <?php $this->beginPage() ?>
    <!DOCTYPE html>
    <html lang="<?= Yii::$app->language ?>">
    <head>
        <meta charset="<?= Yii::$app->charset ?>">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
        <?= Html::csrfMetaTags() ?>
        <title><?= Html::encode($this->title) ?></title>
        <?php $this->head() ?>
    </head>
    <body>
    <?php $this->beginBody() ?>
    <?= $content ?>
    <?php $this->endBody() ?>
    </body>
    </html>
    <?php $this->endPage() ?>

    11.修改模板  /views/site/login.php

    <?php
    use yii\bootstrap4\ActiveForm;
    ?>
    <div class="layadmin-user-login layadmin-user-display-show" id="LAY-user-login" style="display: none;">
        <div class="layadmin-user-login-main">
            <div class="layadmin-user-login-box layadmin-user-login-header">
                <h2>layuiAdmin</h2>
            </div>
            <?php $form = ActiveForm::begin(); ?>
            <div class="layadmin-user-login-box layadmin-user-login-body layui-form">
    
                <div class="layui-form-item">
                    <?= $form->field($model, 'username')
                        ->textInput(['type' => 'text', 'lay-verify' => 'required','class' => 'layui-input','placeholder' => '用户名','id' => 'LAY-user-login-username'])
                        ->label('用户名');
                    ?>
                </div>
    
                <div class="layui-form-item">
                    <?= $form->field($model, 'password')
                        ->textInput(['type' => 'password','id' => 'LAY-user-login-password', 'lay-verify' => 'required','class' => 'layui-input','placeholder' => '密码'])
                        ->label('密码');
                    ?>
                    <?= $form->field($model, 'rememberMe')->textInput(['type'=>'hidden','value' => 1])->label('记住密码');?>
                </div>
    
                <div class="layui-form-item">
                    <button class="layui-btn layui-btn-fluid" lay-submit lay-filter="LAY-user-login-submit">登 入</button>
                </div>
    
            </div>
            <?php ActiveForm::end();?>
        </div>
    </div>

    此时可以访问 http://yii2.com/site/login 并模似登陆提交了

    12.为了方便测试用户认证,先处理用户添加与登陆认证
    建立用户表

    CREATE TABLE `user` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `username` varchar(50) NOT NULL,
      `auth_key` varchar(64) NOT NULL,
      `password_hash` varchar(255) NOT NULL,
      `password_reset_token` varchar(255) DEFAULT NULL,
      `email` varchar(100) DEFAULT NULL,
      `phone` varchar(30) DEFAULT NULL,
      `status` tinyint(1) DEFAULT '1',
      `created_at` int(11) NOT NULL,
      `updated_at` int(11) NOT NULL,
      PRIMARY KEY (`id`),
      KEY `username` (`username`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    13.建立对应的用户功能,执行
    http://yii2web.com/gii/controller

    Controller Class: 
    app\modules\users\controllers\UserController

    其它保持默认
    直接生成

    14.建立添加用户的模型
    /modules/users/models/SignupForm.php
    添加以下的内容

    <?php
    
    namespace app\modules\users\models;
    
    use app\models\User;
    use Yii;
    use yii\base\Model;
    
    /**
     * LoginForm is the model behind the login form.
     *
     * @property-read User|null $user
     *
     */
    class SignupForm extends Model
    {
        public $username;
        public $password;
    
    
        /**
         * @return array the validation rules.
         */
        public function rules()
        {
            return [
                // username and password are both required
                [['username', 'password'], 'required'],
                ['username', 'filter', 'filter' => 'trim'],
                ['username','unique','targetClass' => '\app\models\User', 'message' => 'This username has already been taken.','on'=>['create']],
                ['username', 'string', 'min' => 5, 'max' => 255],
    
                // password is validated by validatePassword()
                [['password'], 'required','on'=>['create']],
                ['password', 'string', 'min' => 6],
            ];
        }
    
        /** 注册用户
         * @return User|null
         */
        public function signup()
        {
            if($this->validate()) {
                $user = new User();
                $user->username = $this->username;
                $user->setPassword($this->password);
                $user->generateAuthKey();
                $user->save();
                if($user->save()) {
                    return $user;
                }
            }
            return null;
        }
    
        public function findOne($id)
        {
            $user = User::findOne($id);
            $this->username = $user->username;
            return $this;
        }
    
        public function attributeLabels()
        {
            return [
                'username' => '用户名',
                'password' => '密码',
            ];
        }
    
    
    }

    15.修改 /models/User.php 内容修改如下

    <?php
    namespace app\models;
    
    use Yii;
    use yii\base\NotSupportedException;
    use yii\behaviors\TimestampBehavior;
    use yii\db\ActiveRecord;
    use yii\web\IdentityInterface;
    
    /**
     * User model
     *
     * @property integer $id
     * @property string $username
     * @property string $password_hash
     * @property string $password_reset_token
     * @property string $email
     * @property string $auth_key
     * @property integer $status
     * @property integer $created_at
     * @property integer $updated_at
     * @property string $password write-only password
     */
    class User extends ActiveRecord implements IdentityInterface
    {
        const STATUS_DELETED = 0;
        const STATUS_ACTIVE = 1;
    
        /**
         * @inheritdoc
         */
        public static function tableName()
        {
            return '{{%user}}';
        }
    
        /**
         * @inheritdoc
         */
        public function behaviors()
        {
            return [
                TimestampBehavior::className(),
            ];
        }
    
        /**
         * @inheritdoc
         */
        public function rules()
        {
            return [
                ['username','required'],
                [['created_at','updated_at'],'integer'],
                ['status', 'default', 'value' => self::STATUS_ACTIVE],
                ['status', 'in', 'range' => [self::STATUS_ACTIVE, self::STATUS_DELETED]],
            ];
        }
    
        /**
         * @inheritdoc
         */
        public static function findIdentity($id)
        {
            return static::findOne(['id' => $id, 'status' => self::STATUS_ACTIVE]);
        }
    
        /**
         * @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::findOne(['username' => $username, 'status' => self::STATUS_ACTIVE]);
        }
    
        /**
         * Finds user by password reset token
         *
         * @param string $token password reset token
         * @return static|null
         */
        public static function findByPasswordResetToken($token)
        {
            if (!static::isPasswordResetTokenValid($token)) {
                return null;
            }
    
            return static::findOne([
                'password_reset_token' => $token,
                'status' => self::STATUS_ACTIVE,
            ]);
        }
    
        /**
         * Finds out if password reset token is valid
         *
         * @param string $token password reset token
         * @return boolean
         */
        public static function isPasswordResetTokenValid($token)
        {
            if (empty($token)) {
                return false;
            }
            $expire = Yii::$app->params['user.passwordResetTokenExpire'];
            $parts = explode('_', $token);
            $timestamp = (int) end($parts);
            return $timestamp + $expire >= time();
        }
    
        /**
         * @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 Yii::$app->security->validatePassword($password, $this->password_hash);
        }
    
        /**
         * Generates password hash from password and sets it to the model
         *
         * @param string $password
         */
        public function setPassword($password)
        {
            $this->password_hash = Yii::$app->security->generatePasswordHash($password);
        }
    
        /**
         * Generates "remember me" authentication key
         */
        public function generateAuthKey()
        {
            $this->auth_key = Yii::$app->security->generateRandomString();
        }
    
        /**
         * Generates new password reset token
         */
        public function generatePasswordResetToken()
        {
            $this->password_reset_token = Yii::$app->security->generateRandomString() . '_' . time();
        }
    
        /**
         * Removes password reset token
         */
        public function removePasswordResetToken()
        {
            $this->password_reset_token = null;
        }
    }

    16. 在 /modules/users/controllers/UserController.php
    修改为如下

    <?php
    
    namespace app\modules\users\controllers;
    
    use Yii;
    use yii\web\Controller;
    use app\modules\users\models\SignupForm;
    
    class UserController extends Controller
    {
        public function actionIndex()
        {
            return $this->render('index');
        }
    
        /**
         * 添加用户
         */
        public function actionCreate() {
            $this->layout='@app/views/layouts/empty';
            $model = new SignupForm();
            $model->setScenario('create');
            if ($model->load(Yii::$app->request->post())) {
                if ($user = $model->signup()) {
                    exit('success');
                }
            }
            return $this->render('create',[
                'model' => $model
            ]);
    
        }
    
    }
  • 相关阅读:
    vue+element-ui实现前端分页
    element-UI中table表格的row-click事件怎么获取一行数据的id
    使用一个for循环将N*N的二维数组的所有值置1
    http常见的状态码
    反转一个英文句子中的单词,并且对应位置大小写不改变
    用一条SQL语句查出每门课都大于80分的学生的姓名
    平滑重启原理及平滑更新
    php之命名空间
    php之trait-实现多继承
    C入门之一
  • 原文地址:https://www.cnblogs.com/lin3615/p/15870088.html
Copyright © 2020-2023  润新知