0

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

这个网站让我希望有一个答案。不幸的是,没有后续教程。

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

我的第二个问题非常相关:是否可以做同样的事情来通过作曲家视图访问页面信息?

谢谢

4

1 回答 1

3

好的,所以我将根据我认为您需要的内容给出一些基本示例。如果您需要它来做一些更具体的事情,请随时提供任何反馈。

第一件事。创建一个包(只是因为它看起来不错,并将所有内容很好地捆绑在一起。
在包控制器中,创建一个名为“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


但我希望能够将参数作为 URL 的一部分传递

不用担心!您只需{paramName}在路径中的某个位置添加。像这样

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

然后在函数中添加相同的参数,所以它会变成function-1($paramName). 请记住保持名称相同!
参数也可以在 url 的中间,比如/api/{paramName}/foo.

目前似乎没有办法直接在 Concrete5 中传递可选参数。所以我建议你注册几个版本,有和没有可选参数。但是,在 GitHub 上有一个未解决的问题:这里
作为可选参数的多个 URL 的替代方法,您可以在请求中通过GETPOST变量获取这些


GET但是我想用, POST,DELETE等来做那个性感的 REST 事情。

我以前没有这样做过,所以这就是我想象的方式

对于应该对 ie和执行不同操作的 URL ,首先调用相同的函数。然后,此函数将检查并重定向到准确的实际函数。GETPOST$_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;
  }
}

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

我希望这提供了一些见解,您可以使用。如果您需要一些更具体的案例,请告诉我。

于 2015-10-27T10:20:52.090 回答