2

标题可能会令人困惑,因为我不确定自己如何解释这一点。我确信它是一个非常简单的解决方案。

我正在将我所有的静态图像、css、js 移动到 S3 - 所以现在可以通过

例如:

http://files.xyz.com/images/logo.gif
http://files.xyz.com/images/submit_button.gif
http://files.xyz.com/style/style.css
http://files.xyz.com/js/jquery.js

files.xyz.com 是指向 files.xyz.com.s3.amazonaws.com 的 CNAME

现在在我的 Zend 布局和视图中 - 我正在使用完整的 URL egs 访问这些

<img src="http://files.xyz.com/images/logo.gif"/>

我担心的是当我在 localhost 上进行测试时 - 我不希望从 S3 中获取数据,而是从我的本地硬盘中获取数据

所以我想做这样的事情。在我的 application.ini - 我应该能够指定

resources.frontController.imageUrl = http://localhost

当我部署时 - 只需将其更改为

resources.frontController.imageUrl = http://files.xyz.com
并在视图中访问它
<img src="<?php echo $this->imageUrl;?>/images/logo.gif"/>

处理此问题的最佳方法是什么谢谢

4

3 回答 3

3

创建视图助手

public function imageUrl()
    {
        $config = Zend_Registry::get('config');
        if($config->s3->enabled){
            return $config->s3->rootPath; 
        }else{
            return $this->view->baseUrl(); 
        }
    }

在应用程序.ini

s3.enabled        = 1
s3.rootPath       = https://xxxxx.s3.amazonaws.com

你可以这样打电话

<img src="<?php echo $this->imageUrl();?>/images/logo.gif"/>

因此,您可以轻松启用/禁用 s3。

于 2012-06-04T14:06:04.863 回答
0

假设您在文件中设置APPLICATION_ENV和使用特定于环境的部分application/configs/application.ini,那么您的想法和视图助手的想法似乎是要走的路。

application/configs/application.ini

[production]

cdn.baseUrl = "http://files.zyz.com"

[development]

cdn.baseUrl = "http://mylocalvirtualhost/assets/img"

然后是一个视图助手:

class My_View_Helper_CdnBaseUrl extends Zend_View_Helper_Abstract
{
    protected static $defaultBase = '';

    protected $base;

    public function cdnBaseUrl($file = '')
    {
        return rtrim($this->getBase(), '/') . '/' . ltrim($file, '/');
    }

    public static function setDefaultBase($base)
    {
        self::$defaultBase = $base;
    }

    protected function getBase()
    {
        if (null === $this->base){
            $this->base = self::$defaultBase;
        }
        return $this->base;
    }
}

application/Bootstrap.php

protected function _initCdn()
{
    $options = $this->getOptions();
    My_View_Helper_CdnBaseUrl::setDefaultBase($options['cdn']['baseUrl']);
}

视图脚本中的 Thenm 用法如下:

<img src="<?= $this->cdnBaseUrl('root/relative/path/to/img.jpg') ?>" alt="Some image">

当然,您将需要添加autloadernamespaces和 view-helper 前缀路径以匹配您自己的命名空间等。

于 2012-06-04T15:20:40.740 回答
0

试试baseUrl 视图助手。在 application.ini 中指定 URL,如下所示:

[production]
resources.frontController.baseUrl = "http://files.xyz.com"

那么在你看来:

<img src="<?php echo $this->baseUrl('images/someimage.jpg'); ?>">
于 2012-06-04T13:17:34.543 回答