存在某些查询字符串时定义Laravel路由

时间:2018-12-11 19:43:39

标签: php laravel routing query-string

说我想能够在任何页面上提交搜索表单,该页面会将?s=附加到当前URL,但返回SERP:https://example.com/my-page?s=foobar。 (我见过一些站点这样做而不是指向/search?s=.*-不是我这样做的方法,但这说明了我的问题。)

在我的Laravel web.php路线中,除了可能使用不规则的正则表达式外,目前是否有其他方法可以注册?

<?php
Route::get('.+?\?.+?\bs={search}', 'SearchController@search');
// This regex is probably wrong, but you get what I was going for,
// and that kinda highlights why this is not an ideal way to do it
?>

例如,当您要捕获多个$ _GET参数时,这变得更难看:

https://example.com/my-page?s=foobar&dept=clothing

我在Laravel文档中找不到任何可让您在Route $uri参数上定义查询字符串选项的内容。推荐的选项是仅使用漂亮的URL(https://example.com/search/foobar),但是肯定有保留查询字符串的有效用例。

2 个答案:

答案 0 :(得分:1)

1:创建中间件(https://laravel.com/docs/5.7/middleware) 2:使用$ request-> query('s')验证传入请求 3:如果验证成功,则返回下一个,否则重定向到任何地方或显示错误响应

答案 1 :(得分:0)

这非常简单,取决于URL的各个部分。 Route类使用URL的“路径字符串”,而您尝试使用URL的“参数”。

https://doepud.co.uk/blog/anatomy-of-a-url

在现代网站中,您应该使用该结构,因为您可以获得更好的URL结构,并且对于SEO和搜索引擎要好得多。

您应该仅在调用小功能的函数中使用参数,这些小东西可以通过$request->get('s');方法调用,但是随后您必须重定向或必须在该函数中工作。

因此,不要与框架打交道,也不要在框架中工作,否则框架中定义的内容将使所有了解框架的人都知道如何使用该框架。