如何解决Twilio Symfony - 控制器必须返回 \"Symfony\\Component\\HttpFoundation\\Response\" 但返回 Twilio\\TwiML\\VoiceResponse"
我想使用 Twilio
和 Symfony5
实现 ApiPlatform
浏览器到浏览器调用
我正在关注这个教程:
/**
* @Route("/twilio/handle/twiml/{clientId}",name="twilio_handl_twiml")
* @param $clientId
* @return VoiceResponse
*/
public function handleTwiml($clientId): VoiceResponse
{
/** @var Client $client */
$client = $this->clientRepository->findOneBy(['id' => 11]);
$to = $client->getUser()->getLastName().$client->getUser()->getId();
$voiceResponse = new VoiceResponse();
$number = htmlspecialchars($to);
$dial = $voiceResponse->dial(null,array('callerId' => '+15017122661'));
if (isset($to)) {
if (preg_match("/^[\d\+\-\(\) ]+$/",$number)) {
$dial->number($number);
} else {
$dial->client($number);
}
} else {
$voiceResponse->say('There has been an issue. Thanks for calling!');
}
return $voiceResponse;
}
并且我在 "get"
部分中的一个实体上将其声明为自定义路由:
* "twilio_handl_twiml"={
* "path"="/twilio/handle/twiml/{clientId}",* "controller"="TwilioController:class"
* },
The controller must return a "Symfony\Component\HttpFoundation\Response" object but it returned an object of type Twilio\TwiML\VoiceResponse.
现在有谁知道为什么我不能从自定义路由返回我想要的任何类型的 Response
吗?
我真的不明白为什么框架会将此声明为错误
如果有人能帮助我更好地理解这个错误,我将不胜感激
谢谢!
解决方法
这里是 Twilio 开发者布道者。
正如@Cerad 在评论中所说,您需要使用派生自 Symfony Response 对象的对象进行响应。
我没有使用过 Symfony,所以如果有误请见谅,但我认为您可以将处理程序更新为以下内容,它可能会起作用:
use Symfony\Component\HttpFoundation\Response;
/**
* @Route("/twilio/handle/twiml/{clientId}",name="twilio_handl_twiml")
* @param $clientId
* @return Response
*/
public function handleTwiml($clientId): VoiceResponse
{
/** @var Client $client */
$client = $this->clientRepository->findOneBy(['id' => 11]);
$to = $client->getUser()->getLastName().$client->getUser()->getId();
$voiceResponse = new VoiceResponse();
$number = htmlspecialchars($to);
$dial = $voiceResponse->dial(null,array('callerId' => '+15017122661'));
if (isset($to)) {
if (preg_match("/^[\d\+\-\(\) ]+$/",$number)) {
$dial->number($number);
} else {
$dial->client($number);
}
} else {
$voiceResponse->say('There has been an issue. Thanks for calling!');
}
$response = new Response(
$voiceResponse->asXML(),Response::HTTP_OK,['content-type' => 'application/xml']
);
return $response;
}
这里的关键是使用语音响应的内容 ($voiceResponse->asXML()
) 构建 Symfony 响应,并将内容类型设置为 application/xml
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。