Работа над приложением Symfony, которое использует nusoap (это лучший метод для интеграции мыльной работы с php / symfony?) Для приема платежей по кредитным картам.
Я упростил пример моего кода ниже.
То, с чем я борюсь, - лучший способ обработки исключений.В приведенном ниже примере есть только 1 пользовательское исключение (где мои пользовательские исключения должны находиться в структуре каталогов symfony? (Lib / exception?)). Но что происходит, когда есть несколько различных типов исключений, которые обрабатывают конкретную ошибку?Не очень элегантно иметь блок try / catch с 20 странными исключениями.
Я также не уверен, куда мне следует бросать и ловить.Мне нужно настроить некоторые пользовательские вспышки, чтобы предупредить пользователя о любых проблемах, поэтому я считаю, что перехват должен выполняться в контроллере действий, а не в классе, который обрабатывает вызов мыла.
Может кто-нибудь сообщить, где яможет быть не так?
Я ненавижу грязный код / решения и хочу как можно больше придерживаться принципа СУХОЙ.Я думаю, что я мог бы также упустить некоторые встроенные функции Symfony, которые могут помочь с этим, но всякий раз, когда я ищу, я обычно нахожу примеры для Symfony 1.2, я использую 1.4..
lib / soap_payment.class.php
class SoapPayment
{
public function charge()
{
/*assume options are setup correctly for sake of example*/
try
{
$this->call();
}
catch (SoapPaymentClientFaultException $e)
{
/* should this be caught here? */
}
}
private function call()
{
$this->client->call($this->options);
if ($this->client->hasFault())
{
throw new SoapPaymentClientFaultException();
}
}
}
apps / frontend / payment / actions / actions.class.php
class paymentActions extends sfActions
{
public function executeCreate(sfWebRequest $request)
{
/* check form is valid etc */
$soap_payment = new SoapPayment();
try
{
$soap_payment->charge();
}
catch (SoapPaymentClientFaultException $e)
{
/* or throw/catch here? */
$this->getUser()->setFlash('error', ...);
$this->getLogger()->err(...);
}
/* save form regardless, will set a flag to check if successful or not in try/catch block */
}
}