【问题标题】:Yii folder structure and global configuration for n applications用于 n 个应用程序的 Yii 文件夹结构和全局配置
【发布时间】:2013-05-21 01:04:06
【问题描述】:

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

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

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

下面是我要构建的架构:

我发现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=user/login。

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

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

对此有什么想法吗?有什么好的建议吗?提前致谢!

【问题讨论】:

  • 您所需要的一切都已经在样板中,除了所有应用程序的通用身份验证。 Yii 用户身份验证是基于应用程序或模块的,我认为它不能通过通用的方式应用于所有应用程序。
  • 您可以在 yii 内置自动加载器之前添加自定义自动加载器并注册它以加载。加载您的任何常用组件,如果找不到,则让 yii autoloder 在每个应用程序中处理它。

标签: php yii yii-extensions boilerplate


【解决方案1】:

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

首先,我的文件夹结构,看起来和它差不多:

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',
        ),
    ),
);

登录

登录在“通用”下,因此,要重定向到登录页面,我只需调用 SiteController.php 并在那里实现登录过程,让用户能够选择他想要获取的应用程序在。

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

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

应用文件夹下的配置文件

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

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

如果您想做类似的事情并且发现难以理解,请告诉我,如果您需要,我会在此处提供更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    相关资源
    最近更新 更多