concrete5 网站 API

concrete5 website API

我在 concrete5 文件管理器中组织了一些分层数据。我想知道是否可以通过其他应用程序从 concrete5 网站外部访问文件管理器(以 API 的方式)。

这个网站让我对这个问题的答案充满希望。可惜没有后续教程。

http://c5hub.com/learning/building-rest-api-using-concrete5-part-1/

我的第二个问题非常相关:是否可以通过 composer 视图执行相同的操作来访问页面信息?

谢谢

Okay, so I'm going to give some basic examples from what I think you need. Feel free to give any feedback if you need it to do some more specific.

要事第一。创建一个包(只是因为它看起来不错,并将所有东西很好地捆绑在一起。
在包控制器中,创建一个名为“on_start()”的 public 函数。

现在决定 URL 结构。
我会做一个 url 前缀,让我们称之为 api,只是为了 crystal 清楚你正在访问 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 的 class,其函数为 function-1()function-2()

所以无论何时访问//domain.abc/api/foo function-1() in ClassName都会被调用。
如果漂亮的 URL 未启用,它将是 //domain.abc/index.php/api/foo


但我希望能够将参数作为 URL

的一部分传递

别担心!您只需在路径中的某处添加 {paramName} 即可。像这样

Route::register('/api/foo/{paramName}', 'Concrete\Package\*package-name*\*ClassName*::*function-1*');

然后在函数中加入同样的参数,就变成了function-1($paramName)记得保持名称相同!
参数也可以在url中间,如/api/{paramName}/foo.

Currently it doesn't seems like there is a way to pass optional parameters directly in Concrete5. So I would suggest that you instead register several versions, with and without the optional parameters. However, there is an open issue on this on GitHub: Here
As an alternative to multiple URLs for optional parameters, you could get those via GET or POST variables in the request


但我想用 GETPOSTDELETE 等来做性感的 REST 事情

我以前没有这样做过,所以这就是我想像的那样

对于 URL 应该 不同 GETPOST,首先调用相同的函数。然后此函数将检查 $_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;
  }
}

当然你只需要添加适用于特定案例的案例,你可以默认任何你想要的功能。

我希望这能给您带来一些见解,您可以与之合作。如果您需要更具体的案例,请告诉我。