Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii:创建演示站点而不复制代码库_Php_Yii_Demo - Fatal编程技术网

Php Yii:创建演示站点而不复制代码库

Php Yii:创建演示站点而不复制代码库,php,yii,demo,Php,Yii,Demo,我需要建立一个演示网站,让用户在注册之前尝试一个web应用程序。演示将基于生产代码,但是,它需要一些小的代码更改:连接到演示数据库,为每个用户自动创建/登录一个新的来宾帐户,等等 显而易见的解决方案是将我的代码库复制为第二个演示网站,并根据需要进行编辑。通过在subversion中添加一个分支,使演示代码与生产代码保持同步非常容易。然而,对于每次我把代码从开发推到生产时都要对我的服务器产品进行两次更新,然后进行演示的前景,我并不那么激动 起初我认为我可以通过一个模块复制这个网站。然而,目前尚不清

我需要建立一个演示网站,让用户在注册之前尝试一个web应用程序。演示将基于生产代码,但是,它需要一些小的代码更改:连接到演示数据库,为每个用户自动创建/登录一个新的来宾帐户,等等

显而易见的解决方案是将我的代码库复制为第二个演示网站,并根据需要进行编辑。通过在subversion中添加一个分支,使演示代码与生产代码保持同步非常容易。然而,对于每次我把代码从开发推到生产时都要对我的服务器产品进行两次更新,然后进行演示的前景,我并不那么激动

起初我认为我可以通过一个模块复制这个网站。然而,目前尚不清楚这是否可行


Yii中是否有技工执行网站配置文件和选定控制器的更改版本

以前从未做过,所以只是一个想法

在其他目录中只有少量文件的解决方案

创建一个单独的演示目录,并将其映射到您的演示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,它覆盖了类,并为站点的演示版本进行了配置。

以前从未这样做过,所以这只是一个想法

在其他目录中只有少量文件的解决方案

创建一个单独的演示目录,并将其映射到您的演示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重写类,并为站点的演示版本进行配置。

为此进行了配置-安装后,请注意单独的index-test.php和protected/config/test.php

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

执行此操作时,我通常在base 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中有一个测试参数

我的两个布局的唯一区别是,其中一个将背景颜色设置为亮黄色,这样就可以非常清楚地看到您在测试站点上。

已为此进行了配置-安装后,请注意单独的index-test.php和protected/config/test.php

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

执行此操作时,我通常在base 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中有一个测试参数


我的两个版面唯一的区别是,其中一个版面将背景颜色设置为亮黄色,这样就可以很清楚地看到你在一个测试站点上。

如果我根据原始帖子的评论答案理解得很好,那么有几种方法。这里有一个链接,我认为可以帮助很大。它帮助我建立了,可能会帮助你! 在Yii 2中,它将是


如果我已经很好地理解了原始帖子的评论答案,那么有几种方法。这里有一个链接,我认为可以帮助很大。它帮助我建立了,可能会帮助你! 在Yii 2中,它将是


你的意思是多个后端,url像site.com/和site.com/admin?至于在演示/实际数据库之间切换:这不是RBAC和/或控制器过滤器和应用程序级参数可以实现的吗?实现这一点的最佳方法是使用两种不同的配置files@Stefano对的我需要可以从demo.site.com或等效的site.com/demo访问演示站点。@JPR不幸的是,我的使用场景并不适合这种类型的设置。用户是创建可公开查看的内容的策展人。为了全面演示系统,测试用户需要能够创建内容登录,并以来宾注销的方式查看该内容。我真的没有看到一个简单的解决方案,可以对公众隐藏演示内容,但让演示用户可以看到。我更愿意将所有演示内容划分为一个单独的url。你是说使用url(如site.com/和site.com/admin)的多个后端吗?至于在演示/实际数据库之间切换:这不是使用RBAC和/或控制器过滤器和应用程序级参数可以实现的吗?实现这一点的最佳方法是使用两个不同配置files@Stefano对的我需要从demo.site.com或等效的site.com/demo访问演示站点。@JPR unformtun
当然,我的使用场景并不真正适合这种类型的设置。用户是创建可公开查看的内容的策展人。为了全面演示系统,测试用户需要能够创建内容登录,并以来宾注销的方式查看该内容。我真的没有看到一个简单的解决方案,可以对公众隐藏演示内容,但让演示用户可以看到。我更喜欢将所有演示内容划分到一个单独的url。这与我的想法类似。从代码片段来看,您的配置文件中似乎有一个标志,用于在测试站点和生产站点之间切换。我需要能够同时运行两个站点,站点分辨率由基本url demo.site.com vs site.com确定。@JasonGeorge我的test.php配置中有一个测试参数,只有在访问index-test.php时才可以获取该参数。听起来好像你可以用URL重写来做同样的事情。这与Ivan的主要区别在于,我只是在记录示例应用程序是如何完成的CMap::arrayMerge在测试配置中,而Ivan在索引+1中的所有配置都是如此。这非常有效。它允许我根据url为演示用户设置自定义配置。谢谢你的澄清。这与我的想法相似。从代码片段来看,您的配置文件中似乎有一个标志,用于在测试站点和生产站点之间切换。我需要能够同时运行两个站点,站点分辨率由基本url demo.site.com vs site.com确定。@JasonGeorge我的test.php配置中有一个测试参数,只有在访问index-test.php时才可以获取该参数。听起来好像你可以用URL重写来做同样的事情。这与Ivan的主要区别在于,我只是在记录示例应用程序是如何完成的CMap::arrayMerge在测试配置中,而Ivan在索引+1中的所有配置都是如此。这非常有效。它允许我根据url为演示用户设置自定义配置。感谢您的澄清。这看起来特别有希望。+1我喜欢这里的配置,但我遇到了“无法解决请求站点”的一些问题。错误和CMap在require_once$yii之前不可用。将您对自定义DemoUser类的建议与ernie的配置相结合,应该会产生一个完整的解决方案。谢谢@JasonGeorge,我有点晚了,但我解决了CMap问题。关于你的问题:看起来你需要2个相同站点的URL,而不需要核心复制,并允许演示站点进行更改。如何添加/修改/删除站点文档/图像?因此,我认为使用一个单独的目录来避免文件损坏,这看起来特别有希望。+1我喜欢这里的配置,但我遇到了一些“无法解决请求站点”的问题。错误和CMap在require_once$yii之前不可用。将您对自定义DemoUser类的建议与ernie的配置相结合,应该会产生一个完整的解决方案。谢谢@JasonGeorge,我有点晚了,但我解决了CMap问题。关于你的问题:看起来你需要2个相同站点的URL,而不需要核心复制,并允许演示站点进行更改。如何添加/修改/删除站点文档/图像?所以我认为使用单独的目录可以避免文件损坏+1谢谢Stefano,这也很有帮助。期待Yii 2+1的内在支持。谢谢Stefano,这也很有帮助。期待Yii 2的内在支持。