将参数传递给路由时未定义路由

时间:2021-01-19 16:55:49

标签: laravel laravel-routing laravel-8 url-parameters named-routing

我有一个带有参数的命名路由,它看起来像这样...

Route::get('/profile/{user_id}', [ProfileController::class, 'profile'])->name('profile');

现在在我的一个控制器中,

我有一个函数像这样调用这条路线

public function _myFunction($some_data) {
    return redirect()->route('profile', [$some_data->user_id]);
}

在我的 ProfileController's profile() 函数中,我有这个。

public function profile() {

    return view('modules.profile.profile');

}

我遵循了在 SO 中找到的文档和一些指南,但我遇到了同样的错误,

"Route [profile] not defined."

有人能告诉我我哪里出错了吗?

这是我的 routes/web.php 的样子...

Route::middleware(['auth:web'])->group(function ($router) {

    Route::get('/profile/{user_id}', [ProfileController::class, 'profile'])->name('profile');

});

2 个答案:

答案 0 :(得分:0)

在调用路由时,您应该传递属性名称和值(作为键值对)。在这种情况下,您的路线期望 user_id,因此您的路线生成应如下所示:

return redirect()->route('profile', ['user_id' => $some_data->user_id]);

在 Laravel 中阅读有关 Generating URLs To Named Routes 的更多信息。

答案 1 :(得分:0)

我解决了这个问题,没有提供更具体的案例信息让你们感到困惑,这真的是我的坏处。

我使用的是社交名流并在第三方回调中调用了 _myFunction()..

毕竟问题出在社交名流的google回调,而不是把return redirect()->route('profile', [$user->id])放在_myFunction()里面,我做的是把它传递给回调函数。

所以现在看起来像这样......

private $to_pass_user_id;
public function handleGoogleCallback()
{
    try {

        $user = Socialite::driver('google')->user();

        $this->_myFunction($user);

        return redirect()->route('profile', [$this->to_pass_user_id]);

    } catch (Exception $e) {

        dd($e->getMessage());

    }
}

public function _myFunction($some_data) {
 
    ... my logic here
    $this->to_pass_user_id = $some_value_from_the_logic
}