Загрузка файлов с использованием медиа-представления в CakePHP

Я хочу загрузить 4 разных файла через 4 разные ссылки. Я использую представление Media для загрузки файлов, но мне нужно жестко указать имя файла в функции загрузки в контроллере:

function download () { $this->view = 'Media'; $params = array( 'id' => 'example.zip', 'name' => 'example', 'download' => true, 'extension' => 'zip', 'path' => APP . 'files' . DS ); $this->set($params); } 

Это отлично работает для одного файла. Теперь, для ссылок номер 2,3,4, мне нужно создать 3 разных действия и указать в них разные имена файлов, или есть способ, которым я могу использовать download (), чтобы загружать только соответствующий файл в зависимости от того, какая ссылка был нажат?

Related of "Загрузка файлов с использованием медиа-представления в CakePHP"

Это переменные. Общий пример:

 function download($fileId) { $file = // find the file you want to serve based on $fileId $pathInfo = pathinfo($file['path']); $this->view = 'Media'; $params = array( 'id' => $file['name'], 'name' => $pathInfo['filename'], 'extension' => $pathInfo['extension'], 'download' => true, 'path' => APP . 'files' . DS ); $this->set($params); } 

В CakePhp 2.x вы получите сообщение об ошибке The view for YourController::download() was not found.

Используйте поле viewClass в CakePHP 2.x:

 $this->viewClass = 'Media'; 

См. « Виды мультимедиа» – документация CakePHP Cookbook v2.x

UPD : представления мультимедиа устаревают с CakePHP 2.3, а CakeResponse::file() следует использовать:

 $this->response->file($file['path'], array('download' => true, 'name' => 'foo')); return $this->response;