Страница CakePHP без верхних и нижних колонтитулов - PullRequest
2 голосов
/ 03 апреля 2011

Как сделать так, чтобы на странице загрузки большого двоичного объекта из базы данных не отправлялись другие выходные данные?Прямо сейчас он отправляет заголовок, отладочную информацию и нижний колонтитул.Как мне сделать так, чтобы ничего из этого не отправлялось, только для этого просмотра?

Ответы [ 3 ]

5 голосов
/ 03 апреля 2011

Если вы используете это для загрузки файлов, вы должны использовать представление 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'
   );
5 голосов
/ 03 апреля 2011

вы можете создать четкий макет (например, empty.ctp) в папке макетов, только с

<?php echo $content_for_layout ?>

и затем в вашем действии, где вы получаете данные BLOB-объектов, используйте этот макет

$this->layout = 'empty.ctp';

, а также для отключения отладки, в ваших контроллерах используйте

Configure::write('debug',0);

Если вы не можете создать новый макет, попробуйте это.

$this->layout = null;
$this->render("view_name");
0 голосов
/ 30 ноября 2012

CakePhp 2.3 пользователей:

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

Надеюсь, это поможет!

...