【问题标题】:Pass variable data between methods in same controller laravel 5.6在同一控制器laravel 5.6中的方法之间传递变量数据
【发布时间】:2018-07-02 05:04:08
【问题描述】:

大家好,你们如何在同一控制器内的function 之间传递变量?我尝试过创建一个全局变量并使用Session:: 来设置和获取值,但是这两种方法都不起作用。我从 generate.blade.php 获取 start_dateend_date 的值,并将值传递给我的 downloadPDF 函数以根据日期范围过滤数据。谁能启发我如何做到这一点?

生成报告控制器

<?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');

【问题讨论】:

  • downloadPDF() 创建一个发布/获取路径并在该路径中提交表单。在downloadPDF($request) 中传递$request 参数。并访问它$request-&gt;start_date
  • @EmptyBrain 我已经更新了我的路线,如果我做得正确,请告诉我
  • 最好将日期作为参数传递:dashboard/attendance/report?start=start_date&end=end_date

标签: php laravel-5.6


【解决方案1】:

已解决

而不是将变量一个函数传递给另一个函数。使用 post 方法将$request 发送到第二个控制器,并使用$request-&gt;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');
    }

刀片视图

{!! 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');

【讨论】:

    【解决方案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-&gt;start_date),它返回null
    • @DexterSiah 请尝试dd($request-&gt;all()) 首先查看您的请求参数。我认为您的价值观在date 键中。你查了吗??
    • 它正在返回[] 我是否遗漏了任何东西,或者你是否误解了我想要获得我的date 的方式。 'start_date' 和 'end_date' 是从 `index' 控制器(生成视图)捕获的,我想将它传递给 'generatePDF' 控制器(pdf 视图)
    • 表格应该可以工作。你检查更新了吗?其他方式,比如你说索引函数已经捕获了你可以发送的值,比如$this-&gt;downloadPDF($start_date, $end_date)
    • 我可以知道我应该把那行代码放在哪里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2020-10-12
    • 1970-01-01
    • 2013-03-01
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多