我有一些分层数据,我在具体的文件管理器中组织了这些数据。我想知道是否可以通过其他应用程序(以 API 的方式)从具体的网站外部访问文件管理器。
这个网站让我希望有一个答案。不幸的是,没有后续教程。
http://c5hub.com/learning/building-rest-api-using-concrete5-part-1/
我的第二个问题非常相关:是否可以做同样的事情来通过作曲家视图访问页面信息?
谢谢
我有一些分层数据,我在具体的文件管理器中组织了这些数据。我想知道是否可以通过其他应用程序(以 API 的方式)从具体的网站外部访问文件管理器。
这个网站让我希望有一个答案。不幸的是,没有后续教程。
http://c5hub.com/learning/building-rest-api-using-concrete5-part-1/
我的第二个问题非常相关:是否可以做同样的事情来通过作曲家视图访问页面信息?
谢谢
好的,所以我将根据我认为您需要的内容给出一些基本示例。如果您需要它来做一些更具体的事情,请随时提供任何反馈。
第一件事。创建一个包(只是因为它看起来不错,并将所有内容很好地捆绑在一起。
在包控制器中,创建一个名为“on_start()”的公共函数。
现在决定一个 URL 结构。
我会做一个 url 前缀,我们称之为它api
,只是为了清楚地表明您正在访问 API。
在on_start()
函数中,您将添加 API URL,如下所示:
public function on_start() {
Route::register('/api/foo', 'Concrete\Package\*package-name*\*ClassName*::*function-1*');
Route::register('/api/bar', 'Concrete\Package\*package-name*\*ClassName*::*function-2*');
}
以上假设您的包中有另一个类,以ClassName
函数function-1()
和function-2()
.
所以每当你访问//domain.abc/api/foo
function-1()
时ClassName
都会被调用。
如果没有启用漂亮的 URL,它将是//domain.abc/index.php/api/foo
不用担心!您只需{paramName}
在路径中的某个位置添加。像这样
Route::register('/api/foo/{paramName}', 'Concrete\Package\*package-name*\*ClassName*::*function-1*');
然后在函数中添加相同的参数,所以它会变成function-1($paramName)
. 请记住保持名称相同!
参数也可以在 url 的中间,比如/api/{paramName}/foo
.
目前似乎没有办法直接在 Concrete5 中传递可选参数。所以我建议你注册几个版本,有和没有可选参数。但是,在 GitHub 上有一个未解决的问题:这里
作为可选参数的多个 URL 的替代方法,您可以在请求中通过GET
或POST
变量获取这些
GET
但是我想用, POST
,DELETE
等来做那个性感的 REST 事情。我以前没有这样做过,所以这就是我想象的方式
对于应该对 ie和执行不同操作的 URL ,首先调用相同的函数。然后,此函数将检查并重定向到准确的实际函数。GET
POST
$_SERVER['REQUEST_METHOD']
例如,让我们看看function-2()
.
function function-2() {
switch ($_SERVER['REQUEST_METHOD']) {
case 'PUT':
$this->function-2_put();
break;
case 'POST':
$this->function-2_post();
break;
case 'GET':
$this->function-2_get();
break;
case 'HEAD':
$this->function-2_head();
break;
case 'DELETE':
$this->function-2_delete();
break;
case 'OPTIONS':
$this->function-2_options();
break;
default:
$this->function-2_error();
break;
}
}
当然您只需要添加适用于特定案例的案例,您可以默认为您想要的任何功能。
我希望这提供了一些见解,您可以使用。如果您需要一些更具体的案例,请告诉我。