我在报告视图中有一个日期范围过滤器,因此,当用户单击下载按钮时,它将选择的日期传递给pdf视图。
默认日期是当前月份的第一天,直到今天为止,用户可以根据需要过滤日期。
如何将这些输入传递到另一个视图?
我应该同时从索引和过滤器函数传递$ from和$ to变量。
我尝试了很多方法,但是都没有用:(
有任何建议吗?
这里是代码:(
控制器
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));
}
Web
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));
}
Web
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
操作接受参数。使用该会话有些晦涩难懂,将很难维护。
因此,我建议您这样做:
带日期范围过滤器的index
或view
操作。
动作download
,带有日期范围过滤器。 (基本上是相同的输入作为view
操作)。当然,单击按钮时,您将使用JavaScript收集当前显示给用户的日期范围输入,然后对download
操作进行AJAX调用。
这是最干净的解决方案,避免与会话紧密耦合,并且更具可读性和可理解性。