0

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

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');

});
4

2 回答 2

0

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

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

阅读更多关于在 Laravel 中为命名路由生成 URL的内容。

于 2021-01-19T17:20:52.560 回答
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
}
于 2021-01-19T17:37:00.477 回答