在Laravel 5.6控制器中无法创建请求对象

3

Controller name 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"时,它会给我以下错误: Error Snap 1 Error Snap 2 请问如何在方法/函数中创建请求对象,并为什么在这里会出现错误?

1
可能是Laravel - 请求中未设置会话存储的重复问题。 - Oleg Nurutdinov
不,这不是重复的问题。 - Dipen
绝对不是重复的。 - Stephen Lake
2个回答

3

您始终可以访问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);
}

1
对我来说看起来很不错。 - Gufran Hasan

0

正如我们所知,Laravel 提供了 web middleware 的概念。我认为你应该使用它来移除会话请求。

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

更多信息

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

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

不,我必须在这个函数中创建请求对象。我不能在路由中这样做。 - Dipen
我不明白为什么当我将请求对象作为函数参数创建时,它可以完美地工作,但在函数体中却无法正常工作? - Dipen
你为什么不能直接使用request()助手函数呢? - Stephen Lake
请问您能否解释一下如何使用request()助手来处理会话(session)? - Dipen
甚至可以只使用 session() 助手函数。如果我即将发布的答案不能满足你的问题(因为我不确定我是否真正知道你的问题是什么),请在评论中提出,我会删除它。 - Stephen Lake
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接