Насколько я знаю, вы не можете поместить прямую ссылку на файл, помещенный в директорию приложения (из-за проблем безопасности, как вы уже писали), поэтому одним из возможных решений является выполнение действия, которое читает содержимое файла и вернуть его в объекте ответа.
Когда пользователь щелкает ссылку на это действие, он открывает окно для открытия / сохранения предоставленного файла.
Пример:
public function exampleAction() {
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
/* ... */
$file = "FILENAME WITH_PATH";
$response = $this->getResponse();
$response->setHeader('Cache-Control', 'public', true);
$response->setHeader('Content-Description', 'public', true);
$response->setHeader('Content-Disposition', 'attachment; filename=' . FILENAME, true);
$response->setHeader('Content-Type', FILETYPE, true);
$response->setHeader('Content-Transfer-Encoding', 'binary', true);
$response->setHeader('Content-Length', filesize($file), true);
$response->setBody(file_get_contents($file));
}
Я вставил в приведенный выше код некоторые константы, потому что его значения зависят от вашего приложения.