在数据库中 blob 的下载页面中,如何使其不发送其他输出?现在,它正在发送页眉、调试信息和页脚。我如何使这些都不发送,只是为了那个视图?
您可以创建一个清晰的布局(例如 empty.ctp
) 在布局文件夹中,仅使用
<?php echo $content_for_layout ?>
然后在获取 Blob 数据的操作中使用该布局
$this->layout = 'empty.ctp';
并且还要禁用调试,在您的控制器中使用
Configure::write('debug',0);
如果您无法创建新布局,可以尝试此操作。
$this->layout = null;
$this->render("view_name");
如果你使用它来下载文件,你应该在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'
);
CakePhp 2.3 用户:
- 使用从图书发送文件
蛋糕Php 2.x用户:
- 使用"$this->viewClass"而不是"$this->view"
复制粘贴就绪的完整解决方案,直接在任何控制器文件中:
<?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);
}
希望这有帮助!