Я хочу загрузить 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 (), чтобы загружать только соответствующий файл в зависимости от того, какая ссылка был нажат?
Это переменные. Общий пример:
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;