在数据库blob的下载页面中,如何进行以下操作以便不发送其他输出?现在它正在发送标题,调试信息和页脚。我如何制作它以便不会发送任何内容,仅用于该视图?
答案 0 :(得分:5)
您可以在layouts文件夹中创建一个清晰的布局(例如empty.ctp
),只能使用
<?php echo $content_for_layout ?>
然后在你获取blob数据的行动中使用该布局
$this->layout = 'empty.ctp';
并且还要禁用调试,在控制器中使用
Configure::write('debug',0);
如果您无法创建新的布局,可以试试这个。
$this->layout = null;
$this->render("view_name");
答案 1 :(得分:5)
如果您使用此文件下载文件,则应使用cakePHP中的Media
视图
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'
);
答案 2 :(得分:0)
CakePhp 2.3用户:
CakePhp 2.x用户:
在任何控制器文件中复制粘贴就绪完整解决方案:
<?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);
}
希望这有帮助!