Просмотр файлов по ссылкам в Zend MVC - PullRequest
0 голосов
/ 22 декабря 2011

В моем приложении у меня есть модуль с именем «клиент».Я хочу создать подкаталог «заявления» и ниже этого «счета», а затем «account_123» и в этом каталоге pdfs, представляющие заявления для клинта 123. Структура клиента, затем операторы затем счета, а затем acount_XXX и PDF-файлы.

Проблема

<a href=What_is_the_url_for">statement_1.pdf</a>?

Будучи MVC, я делаю небольшие прогесты.

Я переместил структуру на публичный доступ, и она почти wotk, за исключением того, что я не мог динамически получить имя хостаir www.hostnam.com/client/statement....

Я знаю, что это проблема безопасности, поэтому я переместил каталог назад под клиентский модуль.

Любая помощь будетоценил.

TIA Ephraim

1 Ответ

0 голосов
/ 23 декабря 2011

Насколько я знаю, вы не можете поместить прямую ссылку на файл, помещенный в директорию приложения (из-за проблем безопасности, как вы уже писали), поэтому одним из возможных решений является выполнение действия, которое читает содержимое файла и вернуть его в объекте ответа.

Когда пользователь щелкает ссылку на это действие, он открывает окно для открытия / сохранения предоставленного файла.

Пример:

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

Я вставил в приведенный выше код некоторые константы, потому что его значения зависят от вашего приложения.

...