问题描述
我创建了一个自定义操作来使用symfony和sarbacane发送短信:
在我的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 __invoke(AppUser $user,Request $request,SerializerInterface $serializer) : bool
{
$data = $request->getContent();
// json decode transforms to object by default
// add true
$json_encode = json_decode($data,true);
$content = $json_encode['content'];
$currentUser = $this->getUser();
$currentUserPhone = $currentUser->getPhone();
$res = $this->sarbacaneApiHelper->call('campaigns/sms',[
'name' => sprintf("eXpanded n°%s",uniqid()),'kind' => 'SMS_NOTIFICATION','smsFrom' => "eXpanded",// entre 3 et 11 caractères alpha-numériques
'content' => $content,// max 450 caractères
]);
$phone = $currentUserPhone;
$sarbacaneCampaignId = $res->id;
// Ajoute des destinataires à la campagne Sarbacane
$res = $this->sarbacaneApiHelper->call(sprintf('campaigns/%s/recipients',$sarbacaneCampaignId),[
[
'phone' => $phone,],]);
$params = [
"phone" => $currentUserPhone,];
$this->sarbacaneApiHelper->call(sprintf('campaigns/%s/send',$params);
$sent = true;
return $sent;
}
我使用邮递员测试了api,并且收到500个内部服务器错误:
“ hydra:description”:“无法自动验证” boolean“类型的值。请提供约束。”
解决方法
为什么会出现此错误消息?
invoke()
方法must return either:
- 一个
Symfony\Component\HttpFoundation\ResponseResponse
实例, - 目标实体的实例(在这种情况下,似乎是
AppUser
。
在您的情况下,该方法返回true
;由于验证是在控制器之后进行的,因此Api-Platform会尝试验证此布尔值,而这是不可能的。它期望一个实体。
关于问题中显示的代码
我仍然不清楚您要达到的目标:
- 为什么从未使用
$user
arg? - 发送电子邮件后是否要保存任何实体?
- 您为什么要提取
Request
的内容?