Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?

Posted

技术标签:

【中文标题】Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?【英文标题】:Laravel - How to pass parameter from controller to route and use it in another controller? 【发布时间】: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]);

【问题讨论】:

【参考方案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 的回答中一样

【讨论】:

以上是关于Laravel - 如何将参数从控制器传递到路由并在另一个控制器中使用它?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel - 将变量从中间件传递到控制器/路由

Laravel 将参数从路由传递到过滤器

如何将 vue.js 值作为参数传递给刀片中的路由

如何在Laravel 5.2中将表单数据作为路由参数传递

Laravel 4:如何传递多个可选参数

如何在 laravel 的单个控制器中传递多个路由