[英]Laravel REST API: Translating query string parameters into database search queries
[英]How to access query string parameters after “Cleaning” your PHP REST API?
为了提供一些背景信息,我最初以如下所示的api开始:
http://myserver/api.php?action=projects
在我的api.php文件中,我有一个简单的if语句来检测操作,然后做出相应的反应:
if (isset($_GET["action"])
{
switch($_GET["action"])
{
case "projects"
dostuff();
break;
case "otherstuff"
dootherstuff();
break;
...
}
}
但是,我当然想清理它,所以我可以转到以下网址:
http://myserver/api.php/projects
并获得相同的结果。 通过阅读之前的SO帖子,我能够实现这一目标:
最终通过在我的根目录中创建一个.htaccess文件并使用重写引擎来使其正常工作,如下所示:
RewriteEngine On
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L]
这很棒! 除了一个问题之外,因为我使用的是干净URL,所以它似乎不再能够识别GET参数的存在。
我发现我可以使用$ _SERVER ['REQUEST_URI'];
然后解析URL以获取我的参数。 我一开始引入多个参数,就看不到如何解决。 我在这里缺少什么,还是需要以另一种方式看待它并更改我格式化参数的方式?
您可以使用以下规则:
RewriteEngine On
RewriteRule ^(?:action|api\.php)/([^/.]+)/?$ api.php?action=$1 [L,NC,QSA]
更改为此:
RewriteEngine On
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L, QSA]
您需要QSA参数来保持查询字符串完整。 所以现在这是可能的:
/action/projects/?my=name
或者您可以这样做:
RewriteEngine On
RewriteRule ^action/([^/\.]+)/([^/\.]+)/?$ api.php?action=$1&method=$2 [L, QSA]
RewriteRule ^action/([^/\.]+)/?$ api.php?action=$1 [L, QSA]
现在,您将拥有以下URL:
/action/projects/add/
/action/projects/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.