两种解决方案:
简单写一个HtmlHelper,可以覆盖默认图片、css等功能
有关详细信息,请参阅https://stackoverflow.com/a/9601207/80353
或者
您可以在 AppHelper 中重写assetUrl 函数,这样您就不需要重写所有相关函数。
public function assetUrl($path, $options = array()) {
$cdnBaseUrl = Configure::read('App.assetsUrl');
$legitCDN = (strpos($cdnBaseUrl, '://') !== false);
if (is_array($path)) {
$path = $this->url($path, !empty($options['fullBase']));
if ($legitCDN) {
return rtrim($cdnBaseUrl, '/') . '/' . ltrim($path, '/');
}
return $path;
}
if (strpos($path, '://') !== false) {
return $path;
}
if (!array_key_exists('plugin', $options) || $options['plugin'] !== false) {
list($plugin, $path) = $this->_View->pluginSplit($path, false);
}
if (!empty($options['pathPrefix']) && $path[0] !== '/') {
$path = $options['pathPrefix'] . $path;
}
if (
!empty($options['ext']) &&
strpos($path, '?') === false &&
substr($path, -strlen($options['ext'])) !== $options['ext']
) {
$path .= $options['ext'];
}
if (isset($plugin)) {
$path = Inflector::underscore($plugin) . '/' . $path;
}
$path = $this->_encodeUrl($this->assetTimestamp($this->webroot($path)));
if ($legitCDN) {
$path = rtrim($cdnBaseUrl, '/') . '/' . ltrim($path, '/');
}
return $path;
}
这是assetUrl的示例代码
在https://github.com/cakephp/cakephp/issues/2149向@lorenzo提供此解决方案的道具
PS:我已将以上内容重写为插件。
因此,您可以简单地让 AppHelper 扩展此 CDNAAppHelper。
https://github.com/simkimsia/UtilityHelpers