【问题标题】:Laravel - Request NullLaravel - 请求空
【发布时间】:2019-12-02 18:54:32
【问题描述】:

我正在尝试在我的 show 方法中从我的表单中请求 $year,但它返回 null。我正在记录时间条目,我想按年查询时间,如下所示:$times = Time::where('user_id', $id)->whereYear('start_day', $request->year)->get();。此查询在我的 getReports 方法中有效,但不在我希望它工作的 show 方法中。如果我 dd($request->all()) 在我的 show 方法中它只返回一个空数组。我不确定如何解决这个问题,我相信这与我的路线 getReport 有关。有没有办法将这些值传递给 show 方法?我只需要 $request->year 就可以正常查询。

路线:

Route::resource('admin/reports', 'Admin\ReportController', [ 'as' => 'admin'])->middleware('admin');
Route::post('admin/reports/getReport', 'Admin\ReportController@getReport')->name('admin.getReport')->middleware('admin');

表单 POST:

<form method="POST" action="{{ route('admin.getReport') }}">

控制器:

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Http\Helper\ReportHelper;
use App\Time;
use App\User;
use App\Category;
use App\Offtime;

use Carbon\Carbon;

use Auth;
use Date;
use PDF;
use Session;


class ReportController extends Controller
{

    public function create() {

        $users = User::all();
        $times = Time::all();
        $years = array();

        $length_times = count($times);
        for($i=0;$i<$length_times;$i++){
            $year = Carbon::parse($times[$i]->start_day)->format('Y');
            array_push($years, $year);
        }

        $years = array_unique($years);

        return view('admin.report.create', compact('users', 'years'));
    }

    public function show($id, Request $request) {

        $user = User::find($id);
        if (!$user) {
            return false;
        }

        $times = Time::where('user_id', $id)->get(); 

        return view ('admin.report.show', compact('user','times')
    }

    public function getReport(Request $request) {
        $form_user = $request->form_user;
        $year = $request->year;

        if (!$form_user) {
            return abort(404);
        }
        $user = User::find($form_user);
        if ($user) {
            return redirect()->route('admin.reports.show', $user->id);
        }
        return abort(404);
    }
}

【问题讨论】:

    标签: php mysql laravel eloquent


    【解决方案1】:

    默认显示使用 GET 方法,并且您正在尝试进行 POST。 getReport 您定义为帖子,这就是它起作用的原因。

    更多关于路由资源的信息

    https://laravel.com/docs/5.7/controllers

    【讨论】:

    • 好的,我将其切换为 GET,现在它正在工作,只是它现在返回此错误。 The Response content must be a string or object implementing __toString(), "boolean" given.
    • @stormakt 因为您的 show 方法返回 false 而不是响应或字符串或任何可以转换为响应的内容
    • 我该如何解决这个问题?
    【解决方案2】:

    在这种情况下,我更喜欢使用Route Model Binding

    public function show(User $user) {
    
            $times = Time::where('user_id', $user->id)->get(); 
    
            return view ('admin.report.show', compact('user','times')
        }
    

    如果user 不存在,这将处理。

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2018-05-15
      • 2020-06-26
      • 2019-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 2019-01-31
      相关资源
      最近更新 更多