Маршрут шаблона электронной почты Laravel с параметром

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

Мой почтовый ящик:

class AppSent extends Mailable
{
    use Queueable, SerializesModels;

    public $name = '';

    public function __construct(String $name)
    {
        $this->name = $name;
    }

    public function build()
    {
        return $this->from(env('MAIL_USERNAME'))
                    ->markdown('emails.download.android_app');
    }
}

при нажатии кнопки я вызываю эту функцию в моем DownloadController, который отправляет пользователю электронное письмо:

return Mail::to($request->email)->queue(new AppSent($request->name));

Это представление уценки (представление электронной почты), которое получает пользователь:

@component('mail::message')
    Hi,

    Downloadlink created

    @component('mail::button', ['url' => 'https://myapp.com/download'])
    Download!

    @endcomponent    
@endcomponent

Это маршрут, по которому мне нужно позвонить, чтобы загрузить zip-файл:

public function download(Request $request)
{
    return response()->download(
        storage_path('/app/uploaded_apps/' . $request->name . '.zip')
    );
}

Как я могу добавить параметр в мое представление лезвия загрузки, чтобы загрузить определенный файл с заданным именем?


person Jon not doe xx    schedule 16.10.2018    source источник


Ответы (2)


Вы можете добавить параметр в массив url:

@component('mail::message')
    Hi,

    Downloadlink created

    @component('mail::button', ['url' => 'https://myapp.com/download', 'name' => $name])
    Download!

    @endcomponent    
@endcomponent
person Remul    schedule 16.10.2018
comment
Не получилось, просто перенаправлял меня на страницу / download и не скачивал - person Jon not doe xx; 16.10.2018
comment
Вы можете разместить сгенерированную ссылку. - person Remul; 16.10.2018

Как насчет создания такого маршрута: routes.php

Route::get('download/{name}', function($name){
   return response()->download(
        storage_path('/app/uploaded_apps/' . $name . '.zip')
    );
});

Вы также можете поместить функцию загрузки в контроллер ... Назовем ее DownloadController, а затем вы могли бы назвать ее:

Route::get('download/{name}', 'DownloadController@download');

Вам понадобится функция загрузки, принимающая $ name в качестве аргумента вместо запроса запроса.

Затем в почтовом клинке:

 @component('mail::button', ['url' => 'https://myapp.com/download/'.$name])
    Download!
@endcomponent 

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

person Abel    schedule 17.10.2018