我在concrete5 filemanager中组织了一些分层数据。我想知道是否有可能通过其他应用程序(以API的方式)从外部访问concrete5网站的filemanager。
这个网站让我对这个问题的答案充满希望。遗憾的是,没有后续教程。
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', 'ConcretePackage*package-name**ClassName*::*function-1*');
Route::register('/api/bar', 'ConcretePackage*package-name**ClassName*::*function-2*');
}
以上假设在包中有另一个名为ClassName
的类,其函数为function-1()
和function-2()
。
所以当你访问//domain.abc/api/foo
时,ClassName
中的function-1()
将被调用。
如果没有启用漂亮的url,它将是//domain.abc/index.php/api/foo
但是我希望能够将参数作为URL的一部分传递
别担心!您只需在路径的某个位置添加{paramName}
。这样的
Route::register('/api/foo/{paramName}', 'ConcretePackage*package-name**ClassName*::*function-1*');
然后在函数中添加相同的参数,因此它将成为function-1($paramName)
。请记住保持名称相同!
参数也可以放在url的中间,如/api/{paramName}/foo
目前似乎没有办法在Concrete5中直接传递可选参数。因此,我建议您注册几个版本,带或不带可选参数。然而,这在GitHub上有一个开放的问题:这里
中的
作为可选参数的多个url的替代方法,您可以通过请求GET
或POST
变量获得这些参数。
但是我想用GET
, POST
, DELETE
等做那些性感的REST事情。
我以前没有这样做过,所以这就是我想象中的方式
对于一个URL, 对GET
和POST
的作用应该不同,从调用相同的函数开始。这个函数将检查$_SERVER['REQUEST_METHOD']
并重定向到准确的real函数。
以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;
}
}
当然,你只需要添加适用于特定情况的情况,并且你可以默认为任何你想要的函数。
我希望这给你一些洞察力,你可以使用。如果您需要更具体的案例,请告诉我。