1

我需要为用户建立一个演示站点,以便在注册之前试用 Web 应用程序。该演示将基于生产代码,但是,它需要进行少量代码更改:连接到演示数据库,为每个用户自动创建/登录新的访客帐户等。

显而易见的解决方案是将我的代码库复制为第二个演示网站并根据需要进行编辑。通过在 subversion 中添加一个分支,使演示代码与生产代码保持同步很容易。然而,每次我将代码从开发推送到生产时,我都不得不在我的服务器上进行两次更新(生产和演示),我对此并不感到兴奋。

最初我以为我可以通过模块复制网站。然而,目前尚不清楚这是否可能。

Yii 中是否有机制来执行网站的更改版本(配置文件和选定的控制器)?

4

3 回答 3

4

从来没有做过,所以只是一个想法

其他目录中文件很少的解决方案

创建一个单独的演示目录并将其映射到您的演示 URL

在这个目录中放这个 index.php(也可能是你的 .htaccess)

<?php
$yii=_PRODUCTION_PATH_.'/framework/yii.php';
$config_prod=_PRODUCTION_PATH_.'/protected/config/main.php';
$config_demo=dirname(__FILE__).'/demo_main.php';

require_once($yii);

$config = CMap::mergeArray($config_prod,$config_demo);

Yii::createWebApplication($config)->run();

demo_main.php 覆盖类 (user, db) 以管理更好的演示体验:

<?php
return array(
        'basePath'=>_PRODUCTION_DIR_.DIRECTORY_SEPARATOR.'..',
        'components'=>array(
             'user' => array(
                  // here you override the user class with a DEMO only user
                  'class'=>'DemoUser',
             )
        ),

将生产站点的所有文件放在不同目录中的解决方案

下面是根目录中的 index.php

<?php

$yii='../framework/yii.php';

$configMain = include dirname(__FILE__).'/protected/config/main.php';
$configProd = include dirname(__FILE__).'/protected/config/production.php';
$configDemo = include dirname(__FILE__) . '/protected/config/demo.php';

require_once($yii);
// for the demo version
// instead of the comment can be an *if* or any solution to manage 2 configs
//$config = CMap::mergeArray($configMain,$configProd);
$config = CMap::mergeArray($configMain,$configDemo);

Yii::createWebApplication($config)->run();

demo.php类似于站点演示版的“demo_main.php”覆盖类和配置。

于 2012-11-30T07:53:51.813 回答
2

为此配置了testdrive 演示应用程序- 安装后,请注意单独index-test.php的 和protected/config/test.php.

与@IvanButtinoni 的建议不同,您需要访问index-test.php,而不是index.php,因此如果您使用干净的 URL 来允许访问 .htaccess ,则可能需要修改您的 .htaccess index-test.php

当我这样做时,我通常会在基本的 controller.php 中编写一个自定义的 init:

    public function init() {
            // use test layout if using test config
            if (isset(Yii::app()->params['test'])) {
                    $this->layout='//layouts/test';
            }
            parent::init();
    }

显然,我的 test.php 中有一个测试参数。. .

我的两种布局的唯一区别是,一种将背景颜色设置为亮黄色,这样很清楚您在测试站点上。

于 2012-11-30T17:00:48.357 回答
1

如果我理解得很好(根据原始帖子的评论答案),那么有几种方法。这是一个我认为可以提供很大帮助的链接。它帮助我设置,可能会帮助你!在 Yii 2 中,它将被固有地支持

http://www.yiiframework.com/wiki/33/

于 2012-11-30T19:10:54.163 回答