[英]Pass variable data between methods in same controller laravel 5.6
Hey guys how do u pass a variable between a function
within the same controller? 大家好,您如何在同一控制器的
function
之间传递变量? I have tried making a global variable and using Session::
to set and get the values but neither of the method works. 我尝试制作一个全局变量并使用
Session::
来设置和获取值,但是这两种方法都不起作用。 I am getting the values of the start_date
and end_date
from my generate.blade.php and pass the value to my downloadPDF
function to filter the data based on the date range. 我从我的generate.blade.php获取
start_date
和end_date
的值,并将该值传递给我的downloadPDF
函数,以根据日期范围过滤数据。 Anyone able to enlighten me how can i accomplish this? 谁能启发我,我该怎么做?
GenerateReportController GenerateReportController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\Attendance;
use App\Subject;
use PDF;
use Session;
use View;
class GenerateReportController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public $start_date;
public $end_date;
public function index()
{
$this->start_date = Input::get('startDate');
$this->end_date = Input::get('endDate');
$subjects = Subject::all();
return View::make('generate', compact('subjects',$subjects));
}
public function downloadPDF()
{
$dateBetween = Attendance::whereBetween('date',array($this->start_date, $this->end_date))->get();
//dd($dateBetween);
$pdf = PDF::loadView('pdf',compact('dateBetween'));
$name = "Attendance Report";
return $pdf->stream($name.'.pdf');
}
}
generate.blade.php generate.blade.php
@extends('master')
@section('page_header')
<div class="container-fluid">
<h1 class="page-title">Attendance Records</h1>
<a href="/dashboard/attendance/report/" target="_blank" class="btn btn-primary">
<i class="voyager-list" style="font-size:15px;"></i>
<span>Generate Report</span>
</a>
</div>
@endsection
@section('content')
<div class="page-content browse container-fluid">
<div class="row">
<div class="col-md-12">
<div class="panel panel-bordered">
<div class="panel-body">
{!! Form::Label('subject', 'Subject:') !!}
<select class="form-control" name="s_name">
@foreach($subjects as $subject)
<option value="{{$subject->s_name}}">{{$subject->s_name}}</option>
@endforeach
</select>
<br>
{!! Form::Label('startDate', 'Start Date:') !!}<br>
{!! Form::input('date', 'startDate', null,['id' => 'datetimepicker','class' => 'datepicker', 'data-date-format' => 'yy/mm/dd']) !!}
<br>
<br>
{!! Form::Label('endDate', 'End Date:') !!}<br>
{!! Form::input('date', 'endDate', null, ['id' => 'datetimepicker','class' => 'datepicker', 'data-date-format' => 'yy/mm/dd']) !!}
</div>
</div>
</div>
</div>
</div>
@endsection
web.php web.php
Route::get('dashboard/attendance/generate','GenerateReportController@index');
Route::get('dashboard/attendance/report','GenerateReportController@downloadPDF');
Try like below 尝试如下
In Route 途中
Route::get('dashboard/attendance/report','GenerateReportController@downloadPDF');
First add this facade in your controller 首先将此外观添加到您的控制器中
use Illuminate\Http\Request;
After convert your function to 将您的函数转换为
public function downloadPDF($request)
{
//try to print first dd($request->all())
$dateBetween = Attendance::whereBetween('date',array($request->start_date, $request->end_date))->get();
//dd($dateBetween);
$pdf = PDF::loadView('pdf',compact('dateBetween'));
$name = "Attendance Report";
return $pdf->stream($name.'.pdf');
}
Form 形成
{!! Form::open(['action'=>'GenerateReportController@downloadPDF']) !!}
{!! Form::Label('subject', 'Subject:') !!}
<select class="form-control" name="s_name">
@foreach($subjects as $subject)
<option value="{{$subject->s_name}}">{{$subject->s_name}}</option>
@endforeach
</select>
<br>
{!! Form::Label('startDate', 'Start Date:') !!}<br>
{!! Form::input('date', 'startDate', null,['id' => 'datetimepicker','class' => 'datepicker', 'data-date-format' => 'yy/mm/dd']) !!}
<br>
<br>
{!! Form::Label('endDate', 'End Date:') !!}<br>
{!! Form::input('date', 'endDate', null, ['id' => 'datetimepicker','class' => 'datepicker', 'data-date-format' => 'yy/mm/dd']) !!}
{!! Form::submit('Submit') !!}
{!! Form::close() !!}
SOLVED 解决了
Instead of passing the variable one a function to another. 而不是将一个函数的变量传递给另一个函数。 Use a post method to send the
$request
to the second controller and use $request->name
to get the value. 使用post方法将
$request
到第二个控制器,并使用$request->name
获取值。
Controller 控制者
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\Attendance;
use App\Subject;
use Session;
use PDF;
use View;
class GenerateReportController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$subjects = Subject::all();
return View::make('generate', compact('subjects'));
}
public function downloadPDF(Request $request)
{
$dateBetween = Attendance::whereBetween('date',array($request->startDate,$request->endDate))->where('s_code',$request->id)->get();
$pdf = PDF::loadView('pdf',compact('dateBetween'));
$name = "Attendance Report";
return $pdf->stream($name.'.pdf');
}
Blade View 刀片视图
{!! Form::open(['action'=>'GenerateReportController@downloadPDF','target' => '_blank']) !!}
{!! Form::Label('subject', 'Subject:') !!}
<select class="form-control" name="id">
@foreach($subjects as $subject)
<option value="{{$subject->id}}">{{$subject->s_name}}</option>
@endforeach
</select>
<br>
{!! Form::Label('startDate', 'Start Date:') !!}<br>
{!! Form::date('startDate', 'startDate',['id' => 'datetimepicker','class' => 'datepicker']) !!}
<br>
<br>
{!! Form::Label('endDate', 'End Date:') !!}<br>
{!! Form::date('endDate', 'endDate',['id' => 'datetimepicker','class' => 'datepicker']) !!}
<br>
<br>
{!!Form::submit('Generate PDF',['class' => 'btn btn-primary'])!!}
{!! Form::close() !!}
web.php web.php
Route::get('dashboard/attendance/generate','GenerateReportController@index');
Route::post('dashboard/attendance/report','GenerateReportController@downloadPDF');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.