我正在尝试编写自定义 GET endpoint,这些endpoint必须具有一个或多个自定义参数,但不构建在特定实体之上。
类似于:/assets/{ device _ id }/{ scene _ id }/{ maybe _ other _ param }
我想象它只是自己的控制器类,我在其中做一些事情,从输入中计算值,手动读取一些数据并返回实体数组。我只得到一个资产实体,但它需要{设备}和{场景}是这个实体的属性…
我不希望这是一个暴露的实体,通过它的属性过滤,我只需要在API中看到简单的endpoint,作为普通的自定义控制器,带一些参数,做一些事情,并返回json。
这听起来很简单,但我阅读了大量的文档和示例,仍然没有找到任何东西。这在API平台中是可能的吗?
如果您希望将路径中的参数直接传递到控制器,则需要使用 “read”=false 配置操作。以下是我可以使用此类收集操作的最简单的资产资源:
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use ApiPlatform\Core\Annotation\ApiProperty;
use App\Controller\GetAssetCollectionByPathParams;
/**
* @ApiResource(
* collectionOperations={
* "get",
* "get_by_path_params"={
* "method"="GET",
* "controller"=GetAssetCollectionByPathParams::class,
* "path"="/assets/{device_id}/{scene_id}/{maybe_other_param?}",
* "read"=false,
* "pagination_enabled"=false,
* "openapi_context"={
* "summary"="Get by path parameters",
* "parameters"={
* {
* "name" = "device_id",
* "in" = "path",
* "required" = true,
* "type" = "integer"
* },
* {
* "name" = "scene_id",
* "in" = "path",
* "required" = true,
* "type" = "string"
* },
* {
* "name" = "maybe_other_param",
* "in" = "path",
* "required" = false,
* "type" = "string"
* }
* }
* }
* }
* },
* itemOperations={
* "get"
* }
* )
*/
class Asset
{
/** @var string */
public $description;
/**
* @return int
* @ApiProperty(identifier=true)
*/
public function getId()
{
return time();
}
}
我用以下Controller类测试了它:
namespace App\Controller;
use App\Entity\Asset;
class GetAssetCollectionByPathParams
{
/**
* @return Asset[]
*/
public function __invoke($device_id, $scene_id, $maybe_other_param=null) :array
{
$result = new Asset();
$result->description = "GetAssetCollectionByPathParams result for device_id: $device_id, scene_id: $scene_id, maybe_other_param: $maybe_other_param";
return [$result];
}
}
也适用于GET项目操作。对于输出为资源的集合操作,不要删除任何默认的“get”操作,否则IriConverter无法生成必要的iri。如果你不想这样做,你必须输出一个不是资源的DTO或其他,并将输出=配置为输出的类。然后你也需要纠正招摇文档,有关集合操作的示例,请参阅我教程的chapter9-api分支。有关POST操作,请参阅我对此问题的回答。
问题内容: 我有一个C#/ Selenium / Specflow测试套件,正在使用xunit.console.exe使用Jenkins运行。我需要将这些测试指向不同的环境(Test / QA / Prod等),并想使用命令行参数。 我正在调用的批处理命令是: 并希望包含一个额外的参数,例如: “ -env = PROD”, 以将该作业指向特定的环境。 我愿意采取更好的方法。 问题答案: 对于此解
问题内容: 我正在将NHibernate与旧的rdbms规则引擎一起使用。我正在使用GenericDialect,但生成的某些sql无法正常工作。如果我需要为此规则引擎编写自定义方言,该如何开始? 问题答案: 这是一个方言示例: 它所在的程序集引用了NHibernate.dll hibernate.cfg.dll(请注意,我这里没有设置’connection.connection_string’属
你好,我想知道是否有人可以帮助我完成一些我卡住的代码。因此,我正在使用lambda语句编写一个自定义比较器,我想执行以下操作。如果返回.getName()的名称彼此相等,那么我想从.getDirection()中选择一个是字符串“Up”(在这种情况下,它保证其中一个是“Up”,另一个是“Down”),否则我们将根据.getType()在字母顺序上查看哪个更高)。 到目前为止,我有这个:
我试图在Android Studio中使用自定义字体,就像我们在Eclipse中所做的那样。但不幸的是,无法弄清楚将“资产”文件夹放在哪里!
问题内容: 我需要为AngularJS编写一个自定义模块,但是我找不到关于该主题的任何好的文档。如何为AngularJS编写一个可以与他人共享的自定义模块? 问题答案: 在这种情况下,您认为文档无法再为您提供帮助,一个很好的学习方法是查看其他已经构建的模块,看看其他人是如何做到的,他们如何设计架构以及如何将它们集成到其中。他们的应用。 在查看其他人的工作之后,您至少应该有一个起点。 例如,看看任何
我想在日志文件的开头写入自定义头行。自定义头是日期/时间,XML文件名, 在log4j中,我可以通过扩展PatternLayout来创建自定义头。 我为自定义头包含了PatternLayout的log4j属性config和子类CustomFileHeaderLayout。工作很好。 log4j.属性