zoukankan      html  css  js  c++  java
  • [Yii Framework] Yii如何实现前后台的session分离

    Yii Framework实现前后台frontend,backend分离的方法有几种,总结如下:

    1. 分开入口文件

    目录结构

    index.php
    admin.php
    assets/
    ...其它目录
    protected/
        config/
            main.php
        components/
        controllers/
        ...其它目录    
        admin/
            config/
                main.php
            components/
            controllers/
            ...其它目录

    网站正常的入口文件是index.php,我们加多一个admin.php用来处理后台事务

    // index.php:
    require('path/to/yii.php');
    Yii::app()->createWebApplication('protected/config/main.php')->run();
    // admin.php:
    require('path/to/yii.php');
    Yii::app()->createWebApplication('protected/admin/config/main.php')->run();

    protected/admin/config/main.php的代码如下

    $backend = dirname(dirname(__FILE__));
    $frontend = dirname($backend);
    Yii::setPathOfAlias('backend', $backend);
    $frontendArray = require($frontend.'/config/main.php');
    $backendArray = array(
        'name'=>'网站后台管理系统',
        'basePath' => $frontend,
        'controllerPath' => $backend.'/controllers',
        'viewPath' => $backend.'/views',
        'runtimePath' => $backend.'/runtime',
        // autoloading model and component classes
        'import'=>array(
            'application.models.*',
            'application.components.*',
            'application.extensions.*',
            'application.extensions.nestedset.*',
            'backend.models.*',
            'backend.components.*', 
        ),
        'components'=>array(
            'user'=>array(
                    // enable cookie-based authentication
                    'allowAutoLogin'=>true,
            ),
        ),
        // main is the default layout
        //'layout'=>'main',
        // alternate layoutPath
        'layoutPath'=>dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR.'views'.DIRECTORY_SEPARATOR.'layouts'.DIRECTORY_SEPARATOR,
    );
    
    return CMap::mergeArray($frontendArray, $backendArray);

    2. 后台admin作为一个module存在

    目录结构如下

    protected/
        commands/
        components/
        ...其它目录
        modules/
          admin/
            assets/
            components/
            controllers/
            ...其它目录

    可以通过设置user这个组件来实现前后台的session id分开

    protected/modules/admin/AdminModule.php

    public function init()
    {
        //...其它代码
        Yii::app()->setComponents(
            array(
                //...其它组件设置代码
                'user' => array(
                    'stateKeyPrefix' => '__admin__',//设置session前缀,以分开不同module
                ),
        ));
    }

    3. 使用架构分离

    其实这个跟第一种方法类似,目录结构如下

    backend/
        components/
    config/
            environments/
                main-private.php *
                main-prod.php
                params-private.php *
                params-prod.php
        main-env.php *
        main-local.php *
        main.php
        params-env.php *
        params-local.php *
        params.php
        test.php
    controllers/
        SiteController.php
        ...
    extensions/
            behaviors/
            validators/
        lib/
        models/
            FormModel.php
            ...
        modules/
        runtime/ *
        views/
            layouts/
            site/
        widgets/
        www/
            assets/ *
            css/
            images/
            js/
            themes/
            index.php
            .htaccess
    common/
        components/
        config/
            environments/
                params-private.php *
                params-prod.php
            params-env.php *
            params-local.php *
            params.php
        data/
        extensions/
            behaviors/
            validators/
        lib/
            Behat/
            Pear/
            Yii/
            Zend/
        messages/
        models/
        widgets/
    console/
        commands/
        components/
        config/
            environments/
        lib/
        migrations/
        models/
        runtime/ *
        yiic.php
    frontend/
        components/
        config/
            environments/
                main-private.php *
                main-prod.php
                params-private.php *
                params-prod.php
            main-env.php *
            main-local.php
            main.php
            params-env.php *
            params-local.php *
            params.php
            test.php
        controllers/
        extensions/
            behaviors/
            validators/
        lib/
        models/ 
        modules/    
        runtime/ *
        views/
            layouts/
            site/
        www/
            assets/ *
            css/
            files/
            images/
                js/
                less/
            index.php
            robots.txt
            .htaccess
    tests/
        bootstrap/
            FeatureContext.php
            YiiContext.php
        features/
            Startup.feature
        behat.yml
    
    INSTALL.md
    README.md
    runbehat
    runpostdeploy
    yiic
    yiic.bat

    github上面有这样一个demo架构,推荐那些有自己服务器的人采用这种架构,具体地址:https://github.com/clevertech/YiiBoilerplate

    Have fun with Yii!

  • 相关阅读:
    解决rsyslog 断电或者被kill 重发问题
    perl dbi 测试 mysql wait_timeout
    PERL DBI 自动重连问题
    elasticsearch 重启后,需要的操作
    Filter Conditions 过滤条件
    rsyslog Properties 属性:
    nginx对比haproxy 的反向代理
    Templates 模板:
    1.Basic Structure
    beego的orm ,用的数据库sqlite3
  • 原文地址:https://www.cnblogs.com/davidhhuan/p/3060425.html
Copyright © 2011-2022 走看看