在Laravel中将可选参数添加到基准路径

时间:2017-09-28 07:02:18

标签: php jquery laravel optional-parameters

我正在尝试将可选参数添加到我的家乡路线

Route::get('/{selectDate?}', [
    "as" => "/",
    "uses" => "PublicController@index"
]);

我的索引函数就像

public function index($date = null)
    {
       if($date!=null){
       //some line of codes
       }

   }

和i通过更改功能上的选择列表触发可选参数

$(function() {
            $('#selectDate').on('change', function() {
                window.location.href = '{{route("/")}}' + "/" + this.value;
            });
});

现在问题是,当我从主页上点击任何其他链接时,他们都在索引函数中,而不是在自己的编写函数中。 需要有关此问题的帮助。

2 个答案:

答案 0 :(得分:1)

任何字符串都与可选参数匹配,有2个选项可以解决此问题。

您可以将此路线放在web.php路线文件的底部,路线将在先到先得的基地匹配,因此如果没有其他路线匹配,路线将只会到达此路线给定的网址。

您的第二个选择是使用正则表达式来定义可以找到更多信息的可选参数here。 简而言之,你可以使用

Route::get('/{selectDate?}', [
    "as" => "/",
    "uses" => "PublicController@index"
])->where('selectDate', '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/');

在此之后,selectDate应始终与01-01-2000匹配。
正则表达式未经测试并从this SO回复

复制

答案 1 :(得分:1)

在这种情况下,您必须使用Regular Expression Constraints检查路由参数,如:

Route::get('{user_tipe}/event', 'admin\EventC@index')->where('user_tipe', 'admin');

路由将匹配admin,如果匹配,则特定路由将起作用,否则不起作用。