代码之家  ›  专栏  ›  技术社区  ›  Luís Henriques

重写Laravel中的路由名称

  •  0
  • Luís Henriques  · 技术社区  · 6 年前

    我试图在调用特定路由时覆盖url文本。

    假设我有这样一条路线:

    /lessons/{n}
    

    但我想重写{n},并向用户显示

    /lessons
    

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

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

    到目前为止,我有这样的想法:

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

    我试过很多其他的方法,但似乎找不到。

    有可能做这样的事吗?

    谢谢您。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Ijas Ameenudeen    6 年前

    你的路线有两个问题。

    1. 路线顺序。像在答案中那样切换它们。
    2. redirect('/lessons', $n); 这将引发无效的HTTP状态代码异常。您可以使用会话闪存数据传递课程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');
        }
    });
    
        2
  •  0
  •   Danyal Sandeelo    6 年前

    你可以这样做:

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

    可以在Laravel中找到更多重定向的详细信息 here

        3
  •  0
  •   Nick Dawes    6 年前

    在GET请求中,参数(n变量)取自URL。因此,您需要在URL中提供参数才能使其工作。

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

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