【问题标题】:Laravel - How to pass parameter from controller to route and use it in another controller?Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?
【发布时间】:2021-09-10 02:33:55
【问题描述】:

我已经配置了如下资源路由

Route::resource('users', UserController::class);

当用户发布数据时,它会调用控制器中的 store 方法,添加数据并设置成功/失败消息。

public function store(Request $request)
{
    // return $request;
    $request->validate(
        [
            "firstName" => 'required',
            "lastName" => 'required',
            "phoneNo" => 'required',
            "email" => 'email:rfc,dns'
        ]
    );

    $date = date(now());
    $data = [
        'firstName' => $request->firstName,
        'lastName' => $request->lastName,
        'phoneNo' => $request->phoneNo,
        'email' => $request->email,
        'designation' => $request->designation,
        'status' => $request->status,
        'createdAt' => $date,
        'updatedAt' => $date,
    ];
    $user = Firebase::insertData($data, static::$collection);
    if ($user->id() != null) {
        $message = "User Created Successfully";
    } else {
        $message = "Something went wrong. Please contact System Admin with error code USR001";
    }
    return redirect()->route('users.index', ['message' => $message]);
}

这将重定向到同一控制器的 index 方法。如何在 index 方法中使用 $message 参数并将其发送到视图?我的索引方法如下

public function index()
{
    $userCollection = app('firebase.firestore')->database()->collection('users');
    $userData = $userCollection->documents();
    $response = [];
    $app = app();
    foreach ($userData as $data) {
        $user = $app->make('stdClass');
        $user->firstName = $data["firstName"];
        $user->lastName = $data["lastName"];
        $user->phoneNo = $data["phoneNo"];
        $user->email = $data["email"];
        $user->designation = $data["designation"];
        $user->status = $data["status"];
        $user->createdAt = $data["createdAt"];
        $user->updatedAt = $data["updatedAt"];
        array_push($response, $user);
    }
    return view('pages.user.list-user', ['response' => $response]);
}

【问题讨论】:

    标签: laravel laravel-8 laravel-routing laravel-controller


    【解决方案1】:

    您可以使用with() 方法和redirect 方法直接将消息作为flash 消息传递。

    将您的重定向代码编辑为:

    return redirect()->route('users.index')->with('message', $message]);
    

    并在您的pages.user.list-user刀片文件中添加以下代码:

    @if (session('message'))
        <div class="alert alert-success">
            {{ session('message') }}
        </div>
    @endif
    

    请访问https://laravel.com/docs/8.x/redirects#redirecting-with-flashed-session-data,了解更多关于使用 Flash 消息进行重定向的信息。

    【讨论】:

      【解决方案2】:

      替换您的重定向代码:

      return redirect()->route('users.index', ['message' => $message]);
      

      return view('pages.user.list-user', ['message' => $message]);
      

      【讨论】:

        【解决方案3】:

        (1)首先在index函数的参数中传递消息:

        public function index($message)
        {
        ...
        }
        

        (2) 没关系,你写的没错:

        return redirect()->route('users.index', ['message' => $message]);
        

        (3) 现在只需访问视图(刀片)中的消息并打印它:

        {{ $message }}
        

        您还可以将消息存储在 $response 数组中,然后简单地将 $response 传递给所需的视图:

        $response['message'] = $message;
        

        【讨论】:

          【解决方案4】:

          您可以使用 index 方法,例如控制器中使用的参数。

          public function index(Request $request)
          {
             // Your code
             $message = $request['message'];
          }
          

          如果您想访问视图中的消息,请使用

          return redirect()->route('users.index')->with('message', $message]);
          

          并使用 session('message') 从视图中访问,就像在 OMi Shah 的回答中一样

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-06-11
            • 2021-01-28
            • 2019-07-10
            • 2017-05-14
            • 1970-01-01
            • 2016-10-06
            • 2020-05-02
            • 1970-01-01
            相关资源
            最近更新 更多