当前位置: 首页 > 面试题库 >

在Laravel下载后如何重定向?

东门阳飇
2023-03-14
问题内容

我正在使用maatwebsite / excel库创建excel文件,然后下载我的文件

在我的控制器中,我这样做:

  public function todas()
    {
        $input = Input::all();

        if(isset($input['todos'])&&($input['todos']!=0))
        {
            set_time_limit(0);
            $datainicio = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('periodo_inicio'); 
            $datafinal  = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('periodo_fim');
            $mes  = DB::table('tb_periodo')->where('cod', $input['todos'])->pluck('mes_referencia');

            $horarioQuery = $this->horario->with(array('funcionario', 'item_contabil'))
                                 ->whereBetween('data', array($datainicio, $datafinal))
                                 ->whereNull('deleted_at')
                                 ->orderBy('cod_funcionario')
                                 ->orderBy('data', 'ASC')
                                 ->get();

            $horarios = reset($horarioQuery);

            $count  = count($horarios);

            if($horarios==null)
                return Redirect::route('relatorios.todas')->withErrors(['não existem marcações para este período']);

            $funcionarios = $this->funcionario->all();

            $datainicio  = Carbon::createFromFormat('Y-m-d H:i:s', $datainicio); 
            $datafinal   = Carbon::createFromFormat('Y-m-d H:i:s', $datafinal);

            $nome = 'Marcações'.$mes.'-'.Carbon::now()->year;
            $this->horario->allToExcel($nome, $horarios);

            return View::make('relatorios.todashow', compact('funcionarios', 'datainicio', 'datafinal', 'horarios', 'count', 'nome'));
        }
        else
        {
            return Redirect::route('relatorios.todas')->withErrors(['Selecione um período!']);
        }
    }

这是我生成excel文件的功能:

public static function allToExcel($nome, $horarios)
    {   
            Excel::create($nome , function ($excel) use ($horarios) {

            $excel->sheet('Marcações', function ($sheet) use ($horarios) {

                $sheet->row(1, array(

                            'Unidade',
                            'Nome',
                            'Função',
                            'Data',
                            'Hora Faturada',
                            'Hora Contratada',
                            'Horas Trabalhadas',
                            'Horas Extras',
                            'Tempo Exposicao',
                            'Atividade',
                            'Item Contabil',
                            'Observacoes'
                        ));

                $sheet->row(1, function($row) {
                    $row->setBackground('#2A8005');
                    $row->setFontColor('#ffffff');
                    $row->setFontWeight('bold');
                });

                $i = 2;
                foreach ($horarios as $horario) {

                        if($horario->funcionario->funcao_qt != null)
                            $funcao = $horario->funcionario->funcao_qt;
                        else   
                            $funcao = $horario->funcionario->funcao_a5;

                        $sheet->row($i, array(
                            $horario->unidade,
                            $horario->funcionario->nome,
                            $funcao,
                            $horario->data->format('d/m/Y'),
                            $horario->hora_faturada->format('H:i'),
                            $horario->hora_contratada,
                            $horario->getWorkedHours()->format('H:i'),
                            $horario->getExtraHours()->format('H:i'),
                            $horario->tempo_exposicao ?: "-",
                            $horario->atividade,
                            $horario->item_contabil->CTD_DESC01,
                            $horario->observacoes
                        ));
                        if($i % 2 != 0)
                        {
                        $sheet->row($i, function($row) {
                            $row->setBackground('#D1D1D1');
                            });
                        }

                        $i++;
                    }
            });

            })->download('xls');
    }

但是在下载excel文件后,我无法重定向到路线或视图,并且我也尝试使用:

路线:

Route::post('relatorios/todas', array('as' => 'relatorios.todas', 'after' => 'voltar', 'uses' => 'ReportsController@todas'));

过滤:

Route::filter('voltar', function()
{
    return Redirect::back()->with('message', '<p class="bg-success"><b>Relatório gerado com sucesso</b></p>');
});

但无论如何都没用,下载我的文件后还有另一种重定向的方式?

提前谢谢!


问题答案:

无法完成。问题是,如果您向用户浏览器发送下载指令,则实际上是在发送响应,并且只能发送回一个响应。

您可以做的是,首先将您的用户重定向到“最终”页面,然后在该页面中开始下载。该代码将类似于:

Session::flash('download.in.the.next.request', 'filetodownload.pdf');

return Redirect::to('/whatever/page');

然后在新页面中,您将有一些选择:

  • HTML:[meta http-equiv =“ refresh” content =“ 5; url = http://watever.com/create_csv.php ”]
  • Javascript:location.href =’ http : //watever.com/create_csv.php ‘;
  • iframe:[iframe src =“ create_csv.php”] [/ iframe]

因此,您可以在布局中执行以下操作:

<html>
  <head>
      @if(Session::has('download.in.the.next.request'))
         <meta http-equiv="refresh" content="5;url={{ Session::get('download.in.the.next.request') }}">
      @endif
   <head>

   <body>
      ...
   </body>
</html>


 类似资料:
  • 我想在成功登录后为特定页面重定向用户。 我不希望用户在登录后导航到上次查看的页面。 我试过以下网址,但它显示我的错误。 错误:

  • 我有多条带有评论的路线,当我单击“回复”时,我会被重定向到一条路线,在那里我可以发布对评论的回复。我如何正确地存储来自我所在地的路线,然后在发布回复后重定向回该路线? 我考虑将URL::previous作为参数传递,并将其存储到隐藏的输入中,但如果用户刷新页面,它将变为空。另一种方法可能是存储在会话中,但我不知道如何可靠地使其过期。。。

  • 我正在与Laravel8合作开发我的论坛项目,目前我已经制作了一个用户可以编辑答案的页面。表格如下: 然后在控制器方法中,我添加了以下内容: 以下是实现这一目标的路线: 现在我想重定向用户到这样的网址: 但是,通过此代码,用户将重定向到此url: 那么我如何才能做到这一点呢? 如果你能和我分享你的想法或建议,我将不胜感激... 谢谢

  • 问题内容: 我有以下python脚本,它可以很好地工作。 但是,我提供的某些URL可能会将其重定向2次或更多次。如何在加载数据之前让python等待重定向完成。例如,当使用上面的代码 这相当于在Google搜索上点击即时幸运按钮,我得到: 香港专业教育学院尝试了(URL,数据,超时),但是,我不确定该放在哪里。 编辑:我实际上发现如果我不重定向,而只是使用第一个链接的标头,我可以抓住下一个重定向的

  • 每个人登录后,我一直无法使用Laravel重定向。连接工作,在我登录后,它重定向到一个空白页面,但如果我更改url路径,我可以访问不同的网页。我们将不胜感激!我正在使用LDAP进行连接,它正在工作。 请让我知道,如果有任何其他代码,我应该提供。 非常感谢。 (重定向IfAuthenticated.php) 命名空间应用程序\ Http\中间件; 使用闭包;使用Illumb\Support\Faca

  • 我是Laravel的新手,我正在使用Laravel 5.8来构建一个应用程序。我使用空间/laravel/权限包来处理应用程序的角色和权限。 一切正常,但我需要帮助,在不同用户登录时将其重定向到不同的仪表盘。 我有四种类型的用户,即管理员、教员、注册员和学生。当他们登录到应用程序时,我希望每个人都被重定向到自己的仪表板。而不是有一个统一的仪表板。 请帮忙!