Laravel - 如何获取输入并将其从一个视图传递到另一个视图 (Mpdf)

Laravel - How to get the inputs and pass it from one view to another view (Mpdf)

我的报告视图中有一个日期范围过滤器,因此当用户单击下载按钮时,它应该将选定的日期传递给 pdf 视图。

默认日期是当月的第一天到今天的日期,用户可以根据需要过滤日期。

如何将这些输入传递给另一个视图?

我应该从索引和过滤函数中传递 $from 和 $to 变量。

我尝试了很多方法,但其中 none 有效:(

有什么建议吗?

这是代码:(

控制器

 public function index(Request $request){
 $startDate = Carbon::now();
        $from = $startDate->firstOfMonth()->format('Y-m-d');
        $to = Carbon::now()->format('Y-m-d');

 return view('Reports.index',compact('from','to');
}

 public function filter(Request $request)
    {
        $from = Carbon::parse($request->input('datepicker_from'))->format('Y-m-d');
        $to = Carbon::parse($request->input('datepicker_to'))->format('Y-m-d');

  return view('Reports.index',compact('from','to');
}

public function print()
    {
        $pdf = PDF::loadView('Reports.reportPDF');
        return $pdf->stream('my.pdf', array('Attachment' => 0));
    }

网络

Route::get('print', 'reportController@print')->name('Reports.reportPDF');

观看次数

<a href="{{ route('Reports.reportPDF') }}" target="_blank"><button class="btn btn-success" title="Download PDF" data-toggle="tooltip"><i class="fa fa-download"></i></button></a>

将两个变量传递给 PDF 视图。

public function print($from,$to)
    {
        $pdf = PDF::loadView('Reports.reportPDF',['from'=>$from,'to'=>$to]);
        return $pdf->stream('my.pdf', array('Attachment' => 0));
    }

网络

Route::get('print', 'reportController@print/{from}/{to}')->name('Reports.reportPDF');

观看次数

<a href="{{ route('Reports.reportPDF',[$from,$to]) }}" target="_blank"><button class="btn btn-success" title="Download PDF" data-toggle="tooltip"><i class="fa fa-`download"></i></button></a>

我使用 Session 实现了这一点。非常感谢:)

Report.blade.php

@php(session(['to' =>  $to, date('Y-m-d')]))
@php(session(['from' =>  $from, date('Y-m-d')]))

PDF.blade.php

Showing Report From:
{{ Carbon\Carbon::parse(request()->session()->get('from'))->formatLocalized('%d %b %Y') }}
To:
{{ Carbon\Carbon::parse(request()->session()->get('to'))->formatLocalized('%d %b %Y') }}

嗯,问题是你做的不太对。

有一些选项:

  • 使动作 print 接受参数。

  • 使动作index接受参数和一个标记参数 用于下载(如果参数出现,那么您的响应将是 PDF 下载)

  • 像你一样使用会话。

对我来说,合适的方法是使 print 动作接受参数。 使用会话有些晦涩难懂,而且很难维护。

总而言之,这是我的推荐:

  • 操作 indexview 带日期范围过滤器。

  • 操作 download 带有日期范围过滤器。 (基本上相同的输入 作为 view 动作)。当然,单击按钮时,您将使用 JavaScript 收集当前显示给用户的日期范围输入,然后对 download 操作执行 AJAX 调用。

这是最干净的解决方案,避免了与会话的紧密耦合,并且更具可读性和易懂性。