我正在編寫一個擴展HtmlHelper
並覆蓋\HtmlHelper::image()
方法來計算圖像尺寸並將它們添加爲HTML屬性的自定義幫助程序。我至今原始圖片的正常工作:圖像的文件系統路徑
public function image($path, $options = array()) {
if (!array_key_exists('width', $options) && !array_key_exists('height', $options)) {
$stamp = Configure::read('Asset.timestamp');
Configure::write('Asset.timestamp', false);
$path = $this->assetUrl($path, $options + array('pathPrefix' => Configure::read('App.imageBaseUrl')));
list($width, $height) = @getimagesize(rtrim(WWW_ROOT, '\\/') . $path);
if (!is_null($width)) {
$options['width'] = $width;
}
if (!is_null($height)) {
$options['height'] = $height;
}
Configure::write('Asset.timestamp', $stamp);
}
return parent::image($path, $options);
}
...但有這些瑕疵:
從插件無法在磁盤上找到圖片(他們應該),例如:
echo $this->Html->image('/debug_kit/img/cake.icon.png', array('alt' => 'CakePHP'));
...產生這個文件系統路徑:
…\src\webroot/debug_kit/img/cake.icon.png
...因此
getimagesize()
失敗,因爲實際位置是:…\src\Plugin\DebugKit\webroot\img\cake.icon.png"
外部圖片(這應該被忽略)經過全過程:
echo $this->Html->image('http://placekitten.com/200/300'); …\src\webroothttp://placekitten.com/200/300
我一直在尋找一個內置方法將CakePHP圖片URL(以\HtmlHelper::image()
接受的任何格式轉換爲文件系統路徑(類似於null
,但不適用時),但找不到任何格式。需要磁盤路徑的本地功能(如\Helper::assetTimestamp()
)被封裝在大量不可重用的代碼中。
有沒有優雅的解決方案?
我不認爲這是真的。 PHP可以處理兩個都沒有任何問題。路徑分隔符不會改變路徑缺少幾個組件的事實(例如'Plugin \ DebugKit')。 (順便說一下,我正在使用CakePHP/2,而不是3) –
您是否嘗試過使用它與插件name.path,請參閱此文檔: - https://book.cakephp.org/2.0/en/core-libraries/ helpers/html.html#HtmlHelper :: image – Deejay
不確定你的意思。我對'image()'方法本身沒有任何問題,插件圖片工作得很好。我想要做一些額外的處理,我需要資源的完整文件系統路徑。我可以編寫50行重複核心PHP功能的代碼,但我想避免這種情況。 –