2014-12-27 2 views
0

я пытаюсь сделать динамический список downwload ссылок на мой взгляд, но я не совсем уверен, как вернуть response::download для каждой ссылкиLaravel 4: загрузка файла из ссылки в окне

этот это то, что я пытался ...

1.-My View

@extends('layouts.main') 
@section('content') 
    @foreach($files as $file) 
     <div class = "row fondue"> 
       <h3><div class="col-md-12"><b><?php echo link_to("/home/download",$file->name,$file)?> </b></div></h3>     
     </div> 

    @endforeach 

@stop 

им не уверен, если я могу отправить третий параметр в link_to

2.-My Route

Route::get('/home/download','[email protected]')->before('auth'); 

3.-Моя функция в контроллере

public function downloadfile($file) 
{ 
    return Response::download($file->route); 
} 

вид кажется нормальным, но при нажатии на ссылки им получать ошибку:

"Missing argument 1 for HomeController::downloadfile()" 

так что я сомневаюсь .... как я могу отправить аргумент, отсутствующий в ссылке в моем представлении, на мой контроллер?

также ... есть лучший способ сделать это?

ответ

0

изменение link_to функции

link_to("/home/download/$file->name",$file->name) 

изменить свой маршрут к:

Route::get('/home/download/{name?}','[email protected]')->before('auth'); 

после этого вы будете иметь возможность увидеть аргумент в функции DownloadFile

1

Ошибка вы получаете жалоба на то, что ваш метод downloadfile() хочет передать $file, но ваш маршрут не дает его. Таким образом, вы хотите обновить свой маршрут с параметром, например:

Route::get('/home/download/{$file}','[email protected]')->before('auth'); 

Однако, так как мы собираемся передать вещи к нему, я предложил бы назвать его, а также - это будет делать вещи проще в дальнейшем:

Route::get('/home/download/{$file}', [ 
    'as' => 'download.file', 
    'uses' => '[email protected]'] 
)->before('auth'); 

Далее, как вы уже догадались, вам нужно будет обновить ссылку. Функция link_to() помощник не принимает массив параметров, поэтому теперь мы используем именованные маршруты, и поэтому теперь мы можем использовать link_to_route() вместо этого - давайте посмотрим на the documentation:

echo link_to_route('route.name', $title, $parameters = array(), $attributes = array()); 

Это означает, что мы можем переписать. Кроме того, не забывайте, что вы используете Blade - нет необходимости в тегах php. Таким образом, мы в конечном итоге с этим:

{{ link_to_route('download.file', $file->name, [$file->id]) }} 

Наконец, я не знаю логику приложения, но ваш метод контроллера, вероятно, нужно сначала найти файл, чей идентификатор вы в настоящее время предоставляют. Вот один пример, но это действительно зависит от того, как выглядит ваше приложение.

public function downloadfile($id) 
{ 
    $file = SomeFileModel::findOrFail($id); 
    return Response::download($file->route); 
} 

Надеюсь, что это поможет!Удачи.

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