yii安装高级版及前后台用户分离详解编程语言

1.下载advanced

2.进入advanced

  cd advanced

3.初始化

  php init

4.新建数据库yii2advanced

  数据库配置common/config/main-local.php

  用migrate新建表

    yii migrate

5.配置nginx

frontend

server { 
    charset utf-8; 
        client_max_body_size 128M; 
        listen       80; 
        server_name  127.0.0.55;   
    root   "E:/vhost/yiidemo/advanced/frontend/web/"; 
    access_log  E:/vhost/yiidemo/advanced/log/frontend-access.log; 
        error_log   E:/vhost/yiidemo/advanced/log/frontend-error.log; 
        location / {     
            index  index.php index.html index.htm  l.php; 
            try_files $uri $uri/ /index.php$is_args$args; 
        } 
    location ~ ^/assets/.*/.php$ { 
            deny all; 
        } 
    location ~ /.php$ { 
            fastcgi_pass   127.0.0.1:9000; 
            fastcgi_index  index.php; 
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            fastcgi_param  PATH_INFO  $fastcgi_path_info; 
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info; 
            include        fastcgi_params; 
            try_files $uri =404; 
        } 
        location ~* //. { 
            deny all; 
        }     
    }

浏览器访问127.0.0.55,可以注册用户了

backend

server { 
    charset utf-8; 
        client_max_body_size 128M; 
        listen       80; 
        server_name  127.0.0.56;   
    root   "E:/vhost/yiidemo/advanced/backend/web/"; 
    access_log  E:/vhost/yiidemo/advanced/log/backend-access.log; 
        error_log   E:/vhost/yiidemo/advanced/log/backend-error.log; 
        location / {     
            index  index.php index.html index.htm  l.php; 
            try_files $uri $uri/ /index.php$is_args$args; 
        } 
    location ~ ^/assets/.*/.php$ { 
            deny all; 
        } 
    location ~ /.php$ { 
            fastcgi_pass   127.0.0.1:9000; 
            fastcgi_index  index.php; 
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; 
            fastcgi_param  PATH_INFO  $fastcgi_path_info; 
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info; 
            include        fastcgi_params; 
            try_files $uri =404; 
        } 
        location ~* //. { 
            deny all; 
        }     
    }

浏览器访问127.0.0.56,用刚才注册的用户可以登录

但是,现在用的是一套用户,前后台的用户应该做分离

6.前后用户台分离

创建migration

  yii migrate/create admin

仿照init文件

use yii/db/Migration; 
class m171009_081713_admin extends Migration 
{ 
    public function up() 
    { 
        $tableOptions = null; 
        if ($this->db->driverName === 'mysql') { 
            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci 
            $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB'; 
        } 
 
        $this->createTable('{{%admin}}', [ 
            'id' => $this->primaryKey(), 
            'username' => $this->string()->notNull()->unique(), 
            'auth_key' => $this->string(32)->notNull(), 
            'password_hash' => $this->string()->notNull(), 
            'password_reset_token' => $this->string()->unique(), 
            'email' => $this->string()->notNull()->unique(), 
            'status' => $this->smallInteger()->notNull()->defaultValue(10), 
            'created_at' => $this->integer()->notNull(), 
            'updated_at' => $this->integer()->notNull(), 
        ], $tableOptions); 
    } 
 
    public function down() 
    { 
        $this->dropTable('{{%admin}}'); 
    } 
}

执行

  yii migrate

(a)前台修改:

  先把公用的common/models中的User.php和LoginForm.php移动到frontend/models中去

  将这两个文件的命名空间改为以frontend开头,将整个前台文件看一遍,把所有涉及到这两个common文件命名空间的需要都改为前台自己的命名空间

(b)后台修改:

  在backend/models中有这两个文件Admin.php和LoginForm.php

  可以使用Gii生成(需要注意要继承IdentityInterface,实现此接口内的方法以及参照User.php来实现相关登录注册方法)

  也可以直接复制同样上面的两个文件(需要将User.php改名为Admin.php,LoginForm.php中的User改为Admin,修改命名空间)

7.用console的功能来创建一个后台管理员

在console/controllers中新建InitController

<?php 
namespace console/controllers; 
use Yii; 
use yii/console/Controller; 
use backend/models/Admin;
class InitController extends Controller { public function actionAdmin() { echo "Create init admin .../n"; // 提示当前操作 $username = $this->prompt('Admin Name:');// 接收用户名 $email = $this->prompt('Email:'); // 接收Email $password = $this->prompt('Password:'); // 接收密码 $model = new Admin(); // 创建一个新用户 $model->username = $username; // 完成赋值 $model->email = $email; $model->password = $password; //注意这个地方,用了Admin模型中的setPassword方法(魔术方法__set) if (!$model->save()) // 保存新的用户 { foreach ($model->getErrors() as $error)// 如果保存失败,说明有错误,那就输出错误信息。 { foreach ($error as $e) { echo "$e/n"; } } return 1; // 命令行返回1表示有异常 } return 0; // 返回0表示一切OK } }
执行
  yii init/admin

按照提示来填写用户名密码等,便可以产生一条管理员数据

8.身份验证

在backend/config/main.php

'components' => [ 
        'request' => [ 
            'csrfParam' => '_csrf-backend', 
        ], 
        'user' => [ 
            'identityClass' => 'backend/models/Admin', 
            'enableAutoLogin' => true, 
            'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true], 
        ],

在frontend/config/main.php

'components' => [ 
        'request' => [ 
            'csrfParam' => '_csrf-frontend', 
        ], 
        'user' => [ 
            'identityClass' => 'frontend/models/User', 
            'enableAutoLogin' => true, 
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true], 
        ],

到此为止,前后台完全没关联了

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/20389.html

(0)
上一篇 2021年7月19日 23:22
下一篇 2021年7月19日 23:22

相关推荐

发表回复

登录后才能评论