牛骨文教育服务平台(让学习变的简单)
博文笔记

[Yii Framework] Yii如何实现前后台的session分离

创建时间:2013-08-06 投稿人: 浏览次数:960

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

目录结构

复制代码
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);
复制代码

目录结构如下

复制代码
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!

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。