【发布时间】:2019-04-09 14:19:47
【问题描述】:
我正在Symfony上发送短信,我通过ovh API,我创建了一个表单来输入要发送的消息,我可以显示它但是当我点击发送时,我有这个错误: 不能使用 Symfony\Bridge\Monolog\Logger 类型的对象作为数组
问题是当我尝试连接到 api ovh 感谢您的帮助
我的服务:
class SmsProvider
{
/** @var array */
private $config;
/** @var LoggerInterface */
private $logger;
public function __construct($config, LoggerInterface $logger)
{
$this->config = $config;
$this->logger = $logger;
}
public function sendMessage($phoneNumbers, $message)
{
$conn = $this->connectToApi();
$phoneNumbers = (array)$phoneNumbers;
$content = [
'charset' => 'UTF-8',
'class' => 'phoneDisplay',
'coding' => '7bit',
'message' => $message,
'noStopClause' => true,
'priority' => 'high',
'receivers' => $phoneNumbers,
'senderForResponse' => true,
];
try {
$smsServices = $conn->get('/sms/');
$result = $conn->post(sprintf('/sms/%s/jobs/',
$smsServices[0]), $content);
} catch (\Exception $e) {
if (null !== $this->logger) {
$this->logger->critical(
sprintf("Erreur lors de l'envoi SMS : %s . Trace :
%s", $e->getMessage(), $e->getTraceAsString()), [
'paramsOvh' => $content
]
);
}
$result = false;
}
return $result;
}
private function connectToApi()
{
if (!isset($this->config['application_key'],
$this->config['application_secret'],
$this->config['consumer_key'],
$this->config['end_point'])
) {
$this->logger->error('OVH config parameters are missing');
throw new \Exception('OVH config parameters are missing');
}
$applicationKey = $this->config['application_key'];
$applicationSecret = $this->config['application_secret'];
$consumerKey = $this->config['consumer_key'];
$endPoint = $this->config['end_point'];
try {
$conn = new Api(
$applicationKey,
$applicationSecret,
$endPoint,
$consumerKey
);
} catch (InvalidParameterException $e) {
$this->logger->critical(
sprintf("Erreur lors de la connexion à l'API OVH : %s .
Trace : %s", $e->getMessage(), $e->getTraceAsString())
);
throw $e;
}
return $conn;
}
}
控制器:
public function sendSmsAction(Request $request)
{
$telephones = $request->get('telephone');
$form = $this->createForm(smsFormType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$message = $form->get('message')->getData();
$smsProvider = $this->get('app.sms.provider');
$smsProvider->sendMessage($message, $telephones);
}
return $this->render('
CeUtilisateurBundle:Utilisateur:sms.html.twig', array(
'form' => $form->createView()));
}
服务.yml
app.sms.provider:
class: Ce\UtilisateurBundle\Services\SmsProvider
arguments: ['@logger']
public: true
【问题讨论】:
-
你确定你放弃了所有的代码吗?你有线路和文件错误吗?您对记录器的使用似乎没问题
-
感谢您的回答,我知道我必须在 service.yml 中传递两个参数,因为我在 smsProvider 服务的构造函数中传递了两个参数,但我不知道该怎么做