2011-04-03 108 views
2

在數據庫中的blob下載頁面中,我將如何設置它以便不發送其他輸出?現在它發送標題,調試信息和頁腳。我怎樣才能做到這一點,以便所有這些都不是爲了那個觀點而發出的?沒有頁眉/頁腳的CakePHP頁面

回答

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用戶:

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); 
} 

何這有助於!

+0

媒體視圖已棄用 - 在2.x中應該使用響應類作爲記錄的這些東西。 – mark 2012-11-30 08:52:50

+0

嗨馬克,我會更新答案。即使2.3還沒有在主頁上發佈。至於我的代碼,這個方法被寫成looong :) – 2012-11-30 09:06:24

+0

2.x!= 2.3(2.x = 2.0/2.1/2.2/2.3)。甚至在2.0中,你也可以使用響應類。 – mark 2012-11-30 09:51:34