我正在尝试学习REST的基础知识,我发现了一个非常好的教程(至少它帮助我理解了基础知识).这是我一直关注的教程.
无论如何,在这段代码中,作者展示了网站如何使用类似内容的基础知识www.example.com/restaurant/42 instead of /?restaurant_ID=42.
任何人都可以解释为什么使用它
explode("/", $path, 2);
instead of
explode("/", $path);
Run Code Online (Sandbox Code Playgroud)
对于这个例子,他们会生成相同的数组,但如果它是一个更长的路径,如果Restaurant/item/3?你不想分开一切吗?正如您所看到的,在这个区块中,他们确实使用了爆炸而没有定义限制.第一个仅仅是资源吗?(我猜控制器是否是MVC)
<?php
// assume autoloader available and configured
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
$path = trim($path, "/");
@list($resource, $params) = explode("/", $path, 2); //why is limit used here?
$resource = ucfirst(strtolower($resource));
$method = strtolower($_SERVER["REQUEST_METHOD"]);
$params = !empty($params) ? explode("/", $params) : array(); //no limit here?
if (class_exists($resource)) {
try {
$resource = new $resource($params);
$resource->{$method}();
}
catch (Exception $e) {
header("HTTP/1.1 500 Internal Server Error");
}
}
else {
header("HTTP/1.1 404 File Not Found");
}
Run Code Online (Sandbox Code Playgroud)
它首先将整个路径分成资源和params变量.$resource将包含第一个元素,$params其余元素.例如:
restaurant/42 -> restaurant, 42
restaurant/item/3 -> restaurant, item/3
foo/bar/baz/boom -> foo, bar/baz/boom
Run Code Online (Sandbox Code Playgroud)
然后,$params字符串进一步细分为单个项目:
restaurant/42 -> restaurant, (42)
restaurant/item/3 -> restaurant, (item, 3)
foo/bar/baz/boom -> foo, (bar, baz, boom)
Run Code Online (Sandbox Code Playgroud)
基本上它正在处理第一部分特殊.
你可以用这个得到同样的效果:
$params = explode('/', $path);
$resource = array_shift($params);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
236 次 |
| 最近记录: |