创建自定义操作和控制器示例不起作用

Lud*_*udi 2 api-platform.com

我刚刚尝试了https://api-platform.com/docs/core/operations/#recommended-method示例。

  1. Book.class按照描述生成了
  2. 添加CreateBookPublication班级
  3. 如果我调用 API,我会收到以下错误:

(1/1) RuntimeException 无法自动装配服务“App\Controller\CreateBookPublication”:方法“__construct()”的参数“$bookPublishingHandler”的类型为“App\Controller\BookPublishingHandler”,但未找到此类。

你有什么主意吗?我想生成一个自己的硬编码响应,没有用于测试目的的学说。

Ken*_*ren 7

看起来你没有BookPublishingHandler类,你必须自己实现它,这个文档示例不是完全有效的演示。

错误表示 DI 试图查找App\Controller\CreateBookPublication但它不存在或未注册为服务。我假设您使用的是默认配置,并且它会src/自动注册在目录中找到的服务。

所以创建目录src/Handler,在里面创建类文件 BookPublishingHandler.php

<?php

namespace App\Handler;

use App\Entity\Book;

class BookPublishingHandler
{
    public function handle(Book $book): array
    {
        // your logic for publishing book or/and eg. return your custom data
    }
}
Run Code Online (Sandbox Code Playgroud)

并将导入添加到您的 CreateBookPublication 控制器

<?php

namespace App\Controller;

use App\Handler\BookPublishingHandler;
Run Code Online (Sandbox Code Playgroud)

或者您可以直接从控制器返回硬编码数组进行测试。

  • 没有必要,您可以在控制器中完成所有工作,但是将代码分成具有单一职责的类是一种很好的做法(https://en.wikipedia.org/wiki/Single_responsibility_principle),它是 https:/ /en.wikipedia.org/wiki/SOLID 原则 (2认同)