Yii文件夹结构和n个应用程序的全局配置

时间:2013-05-21 01:04:07

标签: php yii yii-extensions boilerplate

我正在构建文件夹结构和全局配置,以允许我在Yii框架上创建应用程序,其中所有应用程序都可以共享公共代码,扩展或模块。

这个想法是,每个应用程序都具有该应用程序的业务级别,但是,可以在应用程序之间共享的所有内容,我们希望将其用作公共存储库(模型,扩展,小部件等)

例如,我们希望共享Auth扩展名来控制系统权限,但我想在公共文件夹下“安装”Auth,而不是在每个应用程序下。

下面是我想要构建的架构:

Architecture of the applications

我发现YiiBoilerplate是类似的东西,但他们没有以我们想要的方式配置Yii。

文件夹结构的愿望是:

common/
    css/
    images/
    protected/
        commands/ 
        components/ 
        config/ 
        controllers/ 
        extensions/ 
        models/ 
        views/ 
Application1/
    css/
    images/
    protected/
        commands/ 
        components/ 
        config/ 
        controllers/ 
        extensions/ 
        models/ 
        views/ 

所以,让我们去寻找一些观点:

  1. 如果我的用户在应用程序X(www.applicationx.com)下,并且登录页面是'通用'结构,我想向用户显示如下内容:www.applicationx.com/index.php R =用户/登录。

  2. 我希望能够轻松地在应用程序文件夹和公共文件夹之间“导航”。

  3. 我不想使用Theme,因为我有不同的应用程序,具有不同的视觉要求和行为。

  4. 对此有何想法?有什么好建议吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,我找到了一些方法。

首先,我的文件夹结构与它类似:

common/
    css/
    images/
    js/
    extensions/
        bootstrap/
        auth/
    protected/
        /* Yii Default directory folder*/
Application1/
    css/
    images/
    js/
    protected/
        /* Yii Default directory folder*/

公共文件夹下的配置文件

return array(
    'import'=>array(
        'common.components.*',
        'common.models.*',
    ),
    'modules' => array(
        'auth',
    ),
    'components' => array(
        'authManager' => array(
            'behaviors' => array(
                'auth' => array(
                    'class' => 'common.modules.auth.components.AuthBehavior',
                    'admins'=>array('admin', 'foo', 'bar'), 
                ),
            ),
        ),
        'user' => array(
            'class' => 'common.modules.auth.components.AuthWebUser',
        ),
        'bootstrap'=>array(
            'class'=>'common2.extensions.bootstrap.components.Bootstrap',
        ),
    ),
);

登录

登录在'common'下,因此,为了重定向到登录页面,我只需调用SiteController.php并在那里实现登录过程,让用户能够选择他想要的应用程序进去。

登录后,我将用户重定向到应用程序地址:

$this->redirect(Yii::app()->request->getBaseUrl(true) . "/../" .$App. "/" . "");

在应用程序文件夹下配置文件

在应用程序下,index.php文件具有公共目录的alias,这是他们仍然可以“说话”的方式。

Yii::setPathOfAlias('common', dirname(__FILE__) . $directory);

如果你想做类似事情并且难以理解,请告诉我,如果你需要,我会在这里提供更多信息。