2015-06-03 4 views
0

Я хочу, чтобы файлы загружались по клику, но это не работает. А вот мой код:Twig: передача пути к файлу в качестве аргумента для url

files.html.twig

{% set filepath = asset('bundles/example/files/filename.pdf') %} 
<a href="{{ url('_bundle_route_to_download', { 'filepath': filepath }) }}"> 
<button class="button button-icon button-download">Download</button></a> 

controller.php

/** 
    * @Route("/example/download/{filepath}", name="_bundle_route_to_download") 
    */ 
    public function downloadFile($filepath) 
    { 
     //... 
    } 

Это ошибка, я получаю:

No route found for "GET /example/download//bundles/example/files/filename.pdf%3F1418390151 

Что неправильно в моем синтаксисе?

ответ

1

Ваш синтаксис не является неправильным, но Symfony2 Routing ищет маршрут, который не существует. Вам нужно указать url_encode свой параметр.

Маршрут Symfony2 ищет URL-адрес, соответствующий /example/download//bundles/example/files/, который не будет найден.

{% set filepath = (asset('bundles/example/files/filename.pdf'))|url_encode %} 
<a href="{{ url('_bundle_route_to_download', { 'filepath': filepath }) }}"> 
<button class="button button-icon button-download">Download</button></a> 

Не проверен, но должен делать трюк.

Для получения дополнительной информации см Twig Url Encode

Хотя я не рекомендовал бы, чтобы передать его через в качестве параметра ... -> вот как вы могли бы сделать это.

-1

Или вы можете использовать this из Поваренной книги, чтобы включить символ «/» в пути.

Смежные вопросы