标题可能令人困惑,因为我不确定自己如何解释这一点。我确信这是一个非常简单的解决方案。
我将所有静态图像,css,js移动到S3 - 所以现在可以通过
访问它们EGS:
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
And access it in the view like <img src="<?php echo $this->imageUrl;?>/images/logo.gif"/>
处理此问题的最佳方法是什么? 感谢
答案 0 :(得分:3)
创建视图助手
public function imageUrl()
{
$config = Zend_Registry::get('config');
if($config->s3->enabled){
return $config->s3->rootPath;
}else{
return $this->view->baseUrl();
}
}
在application.ini
中s3.enabled = 1
s3.rootPath = https://xxxxx.s3.amazonaws.com
你可以像这样打电话
<img src="<?php echo $this->imageUrl();?>/images/logo.gif"/>
因此,您可以轻松启用/禁用s3。
答案 1 :(得分:0)
试试baseUrl view helper。在application.ini中指定URL,如下所示:
[production]
resources.frontController.baseUrl = "http://files.xyz.com"
然后在你的观点中:
<img src="<?php echo $this->baseUrl('images/someimage.jpg'); ?>">
答案 2 :(得分: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前缀路径以匹配您自己的命名空间等。