【问题标题】:How to reuse code across multiple domains?如何跨多个域重用代码?
【发布时间】:2013-02-13 02:33:47
【问题描述】:

我只是使用 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 和受保护文件夹中的文件,所有域都应该反映更改。

【问题讨论】:

    标签: php yii reusability


    【解决方案1】:

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

    (当然,这是基于您的所有站点都在同一台服务器上。但我看到 Evan 有这个。这在跨服务器时不起作用。)

    首先,它需要您将代码移出网络根目录并移入文档根目录。见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 & 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多