无法调用 Apigility 中的特定实体

Can't call a specific entity in Apigility

我无法通过 GET 在 Apigility 中调用我的端点。我有以下配置:

'router' => [
    'routes' => [
        ...
        'test' => [
            'type' => Segment::class,
            'options' => [
                'route' => '/test[/:id]',
                'defaults' => [
                    'controller' => Resource\TestResource::class,
                ],
            ],
            'may_terminate' => true,
        ],
        ...
    ],
],
'zf-rest' => [
    Resource\TestResource::class => [
        'listener' => Resource\TestResource::class,
        'route_name' => 'api/rest/test',
        'route_identifier_name' => 'id',
        'entity_http_methods' => [
            'GET',
        ],
        'collection_http_methods' => [
        ],
    ],
],

我的资源是这样的:

class TestResource extends AbstractResourceListener
{
    public function fetch($id)
    {
        return ...
    }
}

现在我尝试在我的浏览器中打开 url /api/rest/test 并得到 405(方法不允许)。

我配置的整个路由是:

'routes' => [
    'api' => [
        'type' => Literal::class,
        'options' => [
            'route' => '/api',
        ],
        'may_terminate' => false,
        'child_routes' => [
            'rest' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/rest',
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'test' => [
                    ...

这就是为什么我的 route_name 是:

'route_name' => 'api/rest/test',

这不是问题所在。但似乎应用程序想要分派 fetchAll 方法(作为集合)而不是 fetch 方法(作为实体),我不知道为什么。

Now I try to open the url /api/rest/test in my browser and get a 405 (method not allowed).

你的URL实际上是在调用一个集合。为了调用实体,您需要指定一个实体 ID,即:/api/rest/test/1 只要 URL 末尾没有 ID,Apigility 就会匹配收集路由,根据您的配置,绝对不允许使用 http 方法进行收集。