在Laravel中覆盖路由名称

时间:2018-11-24 13:43:13

标签: php laravel routes

当我呼叫特定路由时,我试图覆盖url文本。

假设我有一条路线,例如:

/lessons/{n}

但是我想覆盖{n},并向用户展示公正

/lessons

在调用控制器并将其传递给“ n”变量时。

基本上,我只想覆盖url文本,以便在导航栏上仅显示“ /教训”,同时用我的代码调用/ lessons / {n}并将“ n”变量提供给控制器。

到目前为止,我有类似的东西:

Route::GET('/lessons/{n}', function ($n) {
    return redirect('/lessons',  $n);
});
Route::GET('/lessons', 'CourseNuclearController@showLessonView');

我尝试了许多其他方法,但似乎找不到任何方法。

是否有可能做这种事情?

谢谢。

3 个答案:

答案 0 :(得分:1)

您的路线中有两个问题。

  1. 路线顺序。像在答案中一样切换它们。
  2. redirect('/lessons', $n);,这将引发无效的HTTP状态代码异常。您可以使用会话Flash数据传递课程ID。

因此,将您的路线更新为

Route::GET('/lessons/{n}', function ($n) {
    // redirect with the session data
    return redirect('/lessons')->with('lesson_id', $n);
});

Route::GET('/lessons', function () {
    // check if lesson id is present in the session
    if($lesson_id = session('lesson_id', null)) {
        dump('lesson id is ' . $lesson_id);
    } else {
        dump('view all lessons');
    }
});

答案 1 :(得分:0)

您可以这样做:

return redirect()->route('lessons', ['n' => $YOUR_VALUE]);

可以在here

中找到有关Laravel重定向的更多详细信息。

答案 2 :(得分:0)

在GET请求中,参数(n个变量)从URL中获取。因此,您需要在URL中包含该参数才能使其正常工作。

在POST请求中,您可以将变量传递到下一页并检索它以供控制器使用。

根据您的项目,您可能有一个按钮,该按钮触发表单提交,将用户带到下一页,并在隐藏的表单输入中隐藏n变量值。