Передача данных переменных между методами в одном контроллере laravel 5.6

Привет, ребята, как передать переменную между 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');

Создайте маршрут post / get для downloadPDF() и отправьте форму в этом маршруте. передать параметр $ request в downloadPDF($request). И получить доступ к нему $request->start_date

Empty Brain 02.07.2018 07:11

@EmptyBrain, я обновил свой маршрут, дайте мне знать, правильно ли я это делаю

Dexter Siah 02.07.2018 07:13

лучше передать дату как params: панель управления / посещаемость / отчет? start = start_date & end = end_date

Shan 02.07.2018 07:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
2 455
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте, как показано ниже

В пути

 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

Dexter Siah 02.07.2018 07:35

@DexterSiah, пожалуйста, попробуйте dd($request->all()) Сначала, чтобы увидеть параметры вашего запроса. Я думаю, что ваши ценности находятся в ключе date. Вы это проверили ??

Empty Brain 02.07.2018 07:40

он возвращает [], я что-то упустил или вы неправильно истолковали, как я хочу получить свой date. 'Start_date' и 'end_date' захватываются из контроллера 'index' (сгенерировать представление), и я хочу передать их контроллеру 'generatePDF' (представление pdf)

Dexter Siah 02.07.2018 07:45

Форма должна работать. вы проверяли обновления ?? Другой способ, как вы говорите, функция индекса уже захватила значение, которое вы можете отправить, например, $this->downloadPDF($start_date, $end_date)

Empty Brain 02.07.2018 07:48

Могу ли я узнать, где мне поместить эту строку кода?

Dexter Siah 02.07.2018 07:49
Ответ принят как подходящий

Решено

Вместо того, чтобы передавать переменную одну функцию в другую. Используйте метод 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');

Другие вопросы по теме