在數據庫中的blob下載頁面中,我將如何設置它以便不發送其他輸出?現在它發送標題,調試信息和頁腳。我怎樣才能做到這一點,以便所有這些都不是爲了那個觀點而發出的?沒有頁眉/頁腳的CakePHP頁面
2
A
回答
5
您可以創建一個清晰的佈局(如empty.ctp
)在你Layouts文件夾,只能用
<?php echo $content_for_layout ?>
,然後在你的行動,你會得到你的BLOB數據使用佈局
$this->layout = 'empty.ctp';
並且還禁用調試,在您的控制器中使用
Configure::write('debug',0);
如果您無法創建新的佈局,你可以試試這個。
$this->layout = null;
$this->render("view_name");
5
如果你使用這個下載文件,你應該使用Media
視圖在CakePHP
http://book.cakephp.org/view/1094/Media-Views
$this->view = 'Media';
$params = array(
'id' => 'example.zip',
'name' => 'example',
'download' => true,
'extension' => 'zip', // must be lower case
'path' => APP . 'files' . DS // don't forget terminal 'DS'
);
0
CakePHP的2.3用戶:
- 使用Sending files從書
CakePHP的2.x的用戶:
- 使用 '$這個 - > viewClass類' 而不是 '$這個 - >視圖'
複製粘貼準備好完整解決方案,就在任何控制器文件:
<?php
public function download($file) {
$fsTarget = APP.WEBROOT_DIR.DS.'files'.DS.$file; // files located in 'files' folder under webroot
if (false == file_exists($fsTarget)){
throw new NotFoundException(__('Invalid file'));
}
$pathinfo = pathinfo($fsTarget);
$this->viewClass = 'Media';
$params = array(
'id' => $file,
'name' => $pathinfo['filename'], // without extension
'download' => true,
'extension' => $pathinfo['extension'], // must be lower case
'path' => dirname($fsTarget) . DS // don't forget terminal 'DS'
);
$this->set($params);
}
何這有助於!
媒體視圖已棄用 - 在2.x中應該使用響應類作爲記錄的這些東西。 – mark 2012-11-30 08:52:50
嗨馬克,我會更新答案。即使2.3還沒有在主頁上發佈。至於我的代碼,這個方法被寫成looong :) – 2012-11-30 09:06:24
2.x!= 2.3(2.x = 2.0/2.1/2.2/2.3)。甚至在2.0中,你也可以使用響應類。 – mark 2012-11-30 09:51:34