API平台Symfony,使用sarbacane发送sms时无法验证布尔类型的值
我创建了一个使用symfony和sarbacane发送sms的自定义操作: 在我的API平台Symfony,使用sarbacane发送sms时无法验证布尔类型的值,symfony,api-platform.com,Symfony,Api Platform.com,我创建了一个使用symfony和sarbacane发送sms的自定义操作: 在我的AppUser实体中,我添加了注释: * "GET", * "PUT", * "PATCH", * "DELETE", * "send_sms"={ * "method"
AppUser
实体中,我添加了注释:
* "GET",
* "PUT",
* "PATCH",
* "DELETE",
* "send_sms"={
* "method"="POST",
* "path"="/app_users/{id}/sms",
* "controller"=SmsController::class,
* "normalization_context"={"groups"={"user:read"}},
* "put"={"validation_groups"={"Default", "sedValidation"}}
* }
* }
在我的控制器中,我实现了invoke方法:
public function\u调用(AppUser$user,Request$Request,SerializerInterface$serializer):bool
{
$data=$request->getContent();
//默认情况下,json解码转换为对象
//加真
$json_encode=json_decode($data,true);
$content=$json_encode['content'];
$currentUser=$this->getUser();
$currentUserPhone=$currentUser->getPhone();
$res=$this->sarbacaneApiHelper->call('campaigns/sms')[
'name'=>sprintf(“扩展n°%s”,uniqid()),
“种类”=>“短信通知”,
'smsFrom'=>“扩展”//entre 3 et 11 caractères alpha numériques
'content'=>$content,//最大450克拉
]);
$phone=$currentUserPhone;
$sarbacaneCampaignId=$res->id;
//萨尔巴坎坎帕涅酒店
$res=$this->sarbacaneApiHelper->call(sprintf('campetings/%s/recipients',$sarbacaneacampaignid)[
[
'phone'=>$phone,
],
]);
$params=[
“电话”=>$currentUserPhone,
];
$this->sarbacaneApiHelper->call(sprintf('campetings/%s/send',$sarbacaneacampaignid),$params);
$sent=true;
退回$sent;
}
我使用postman测试了api,得到了500个内部服务器错误:
“hydra:说明”:“无法自动验证“布尔”类型的值。请提供约束。”
为什么会出现此错误消息?
invoke()
方法:
- 一个
实例Symfony\Component\HttpFoundation\ResponseResponse
- 目标实体的一个实例(在本例中似乎是
)AppUser
true
;由于验证紧跟在控制器之后,Api平台尝试验证此布尔值,但这是不可能的。它需要一个实体
关于问题中显示的代码
我仍然很不清楚你想要实现什么:
- 为什么从不使用
arg$user
- 发送电子邮件后是否要保存任何实体
- 为什么要获取
内容请求
invoke()
方法的第一个参数是$user
而不是$data
,因此它应该抛出一个错误。我不明白为什么不。我不知道发送\u sms
自定义操作中的“put”
键是什么。最后您要声明一个POST操作,这意味着永远不会调用ReadListener
,因此{id}
参数是无用的。谢谢您的回答,您能解释一下数据应该是什么吗?我应该注入什么类来使用数据,以及如何在不传递id的情况下正确地将自定义操作添加到另一个路由?谢谢,我创建了一个新的sms实体,并返回了一个sms对象,我有一个问题,可以将类公开为api资源吗?只有一个类不是实体,我试图在我的src中创建一个目录,名为ApireSource的目录,我创建了一个类,并添加了注释,使这个类成为api ressource,但我在api平台的文档中看不到该类,我能做什么?如何定义“类和实体”之间的区别?当我们执行make:migration和doctrine:migration:migrate时,实体将编辑数据库,类将在不接触数据库的情况下操作数据当然,也将这些类放入实体/
目录,然后从中删除所有@ORM
注释。现在必须在自定义操作声明中实现自己的或声明read=false
。在任何情况下,请记住,控制器必须返回类的实例。如果答案解决了你的问题,别忘了接受它。非常感谢你,唯一的办法就是删除orm注释?没有办法将类公开为api资源?