Привет, ребята, как передать переменную между function в одном контроллере? Я попытался создать глобальную переменную и использовать Session:: для установки и получения значений, но ни один из методов не работает. Я получаю значения start_date и end_date из своего файла generate.blade.php и передаю значение моей функции downloadPDF для фильтрации данных на основе диапазона дат. Кто-нибудь может просветить меня, как я могу этого добиться?
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
@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
Route::get('dashboard/attendance/generate','GenerateReportController@index');Route::get('dashboard/attendance/report','GenerateReportController@downloadPDF');
@EmptyBrain, я обновил свой маршрут, дайте мне знать, правильно ли я это делаю
лучше передать дату как params: панель управления / посещаемость / отчет? start = start_date & end = end_date






Попробуйте, как показано ниже
В пути
Route::get('dashboard/attendance/report','GenerateReportController@downloadPDF');
Сначала добавьте этот фасад в свой контроллер
use Illuminate\Http\Request;
После преобразования вашей функции в
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::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() !!}
Я пробовал решение, которое вы дали, и, к сожалению, оно не вернуло никаких данных в моем представлении PDF. Я попробовал dd($request->start_date), и он возвращает null
@DexterSiah, пожалуйста, попробуйте dd($request->all()) Сначала, чтобы увидеть параметры вашего запроса. Я думаю, что ваши ценности находятся в ключе date. Вы это проверили ??
он возвращает [], я что-то упустил или вы неправильно истолковали, как я хочу получить свой date. 'Start_date' и 'end_date' захватываются из контроллера 'index' (сгенерировать представление), и я хочу передать их контроллеру 'generatePDF' (представление pdf)
Форма должна работать. вы проверяли обновления ?? Другой способ, как вы говорите, функция индекса уже захватила значение, которое вы можете отправить, например, $this->downloadPDF($start_date, $end_date)
Могу ли я узнать, где мне поместить эту строку кода?
Решено
Вместо того, чтобы передавать переменную одну функцию в другую. Используйте метод post для отправки $request второму контроллеру и используйте $request->name для получения значения.
Контроллер
<?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
Route::get('dashboard/attendance/generate','GenerateReportController@index');
Route::post('dashboard/attendance/report','GenerateReportController@downloadPDF');
Создайте маршрут post / get для
downloadPDF()и отправьте форму в этом маршруте. передать параметр $ request вdownloadPDF($request). И получить доступ к нему$request->start_date