【问题标题】:Unable to create Request object in laravel 5.6 controller无法在 laravel 5.6 控制器中创建请求对象
【发布时间】:2019-04-21 13:24:46
【问题描述】:

控制器名称MyController

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class MyController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(){
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create(){
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request){
        //
        $request->session()->put('key', '123');
        $data = $request->session()->get('key');
        print_r($data);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id){
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id){
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id){
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id){
        //
    }
    public function contact(){
        return view('contact');
    }

    public function createSession(Request $request){
        //
        $request->session()->put('key', '123');
        $data = $request->session()->get('key');
        print_r($data);
    }
    public function viewSession_v1(Request $request){
        $data = $request->session()->get('key');
        print_r($data);
    }
    public function viewSession_v2(Request $request){
        $data = $request->session()->get('key');
        print_r($data);
    }
}

路线:

Route::get('createSession', 'MyController@createSession');
Route::get('viewSession-1', 'MyController@viewSession_v1');
Route::get('viewSession-2', 'MyController@viewSession_v2');

现在当我调用"createSession" 时,它将创建新会话,当我调用"viewSession-1""viewSession-2" 时,它将显示会话值,但我想从viewSession_v2() 中删除Request $request,所以我执行了以下代码:

public function viewSession_v2(){
        $request = new \Illuminate\Http\Request();
        $data = $request->session()->get('key');
        print_r($data);
    }

现在当我打电话给"viewSession-2" 时,它会给我以下错误

请任何人告诉我如何在method/function? 中创建请求对象以及为什么它在这里给我一个错误?

【问题讨论】:

标签: php laravel-5 laravel-5.6


【解决方案1】:

您始终可以访问 request()session() 助手:

public function viewSession_v2(){
      $data = request()->session()->get('key');
      print_r($data);
}

public function viewSession_v2(){
      $data = session()->get('key');
      print_r($data);
}

【讨论】:

  • 我觉得不错
【解决方案2】:

我们知道 Laravel 提供了web middleware 概念。我认为您应该使用删除会话请求。

Route::group(['middleware' => ['web']], function () {
    // your routes here
});

More Info

或者你可以把这个条件写成:

public function viewSession_v2(Request $request){
    if($request->hasSession()) {
            $data = $request->session()->get('key');
            print_r($data);
        }
}

【讨论】:

  • 不,我必须在函数中创建请求对象。我不能在路线上这样做。
  • 我不明白当我创建请求对象作为函数参数时它工作得很好,那么为什么它不能在函数体中工作?
  • 您是否有理由不能只使用request() 助手?
  • 请您解释一下我如何使用 request() 助手进行会话?
  • 我们知道 session() 是一个帮助器,可以让你更快地访问 request()->session()。
猜你喜欢
  • 2017-03-13
  • 2020-10-11
  • 2019-09-21
  • 1970-01-01
  • 2017-03-08
  • 2016-11-14
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
相关资源
最近更新 更多