如何跨多个域重用代码?

时间:2013-02-27 10:17:54

标签: php yii reusability

我只是使用Yii框架构建CMS框架。我想将CMS部署到多个域。

/home/root/www/domain1.com
/home/root/www/domain2.com
/home/root/www/domain3.com
/home/root/www/domain4.com

我想重用css文件和受保护文件夹下的所有文件,这样一旦我更新css和受保护文件夹中的文件,所有域都应该反映更改。

1 个答案:

答案 0 :(得分:3)

是的,Yii支持这一点。事实上,这就是我配置一些网站的方式。

(当然,这是基于将所有网站放在同一台服务器上。但我发现Evan有这个。这不适用于服务器。)

首先,这需要您将代码移出Web根目录并进入文档根目录。请参阅here

其次,它要求您使用Yii AssetsBase。请参阅herethere。我发现资产管理是一个配置的熊(但是可以轻松使用)。这就是我最终的结果:

在components / Controller.php中包含以下内容:

    /**
     * @var registers which js, css, images have been published
     * See: http://www.yiiframework.com/wiki/311/assetmanager-clearing-browser-s-cache-on-site-          update/
 */

    private $_assetsBase;

    public function getAssetsBase()
    {
            if ($this->_assetsBase === null) {
                Yii::app()->assetManager->newDirMode = 0755;        
                Yii::app()->assetManager->newFileMode = 0644;        

                    $this->_assetsBase = Yii::app()->assetManager->publish(
                            Yii::getPathOfAlias('application.assets'),
                            false,
                            -1,
                            defined('YII_DEBUG') && YII_DEBUG
                    );
            }
            return $this->_assetsBase;
    }

以上假设您的JS,CSS和图像位于以下位置:

protected/assets/js/mobiscroll-2.3.custom.min.js
protected/assets/css/mobiscroll-2.3.custom.min.css
protected/assets/img/einstein.png

然后在您的观看中,按如下方式调用您的资源:

<?php
$cs->registerScriptFile($this->assetsBase.'/js/mobiscroll-2.3.1/js/mobiscroll-2.3.custom.min.js');
$cs->registerCssFile($this->assetsBase.'/js/mobiscroll-2.3.1/css/mobiscroll-2.3.custom.min.css');
?>

<img src="<?php echo $this->assetsBase ?>/img/einstein.png">

最后,在对JS或CSS进行更改之后,您将需要在所有用户的浏览器中强制执行缓存刷新。您可以通过触摸(原始)资产目录来执行此操作。这将迫使Yii重新发布(已发布的)资产目录。随后,你的JS&amp; CSS将在所有用户的浏览器中刷新。做这样的事情:

$command = 'touch /path/to/your/website/protected/assets';
exec ( $command.' 2>&1',  $output , $result  );
if ($result === 0) {
    $message = 'Assets have been pointed; a new directory should now be hashed';
} else {
    $message = 'Looks like something went wrong. Assets not pointed?';
} // END if