Symfony2: как отловить исключение DataTransformer? - PullRequest
0 голосов
/ 05 марта 2012

У меня есть преобразователь данных в Symfony 2:

namespace Techforge\ApartmentBundle\Form\DataTransformer;

use Symfony\Component\Form\Exception\TransformationFailedException;
use Symfony\Component\Form\DataTransformerInterface;
use Doctrine\Common\Persistence\ObjectManager;

class SearchboxToCityTransformer implements DataTransformerInterface {


public function reverseTransform($string)
{
    //...
    if(!$city)
        throw new TransformationFailedException(sprintf('City not found.'));
}
//...

Я не могу понять, как перехватить это исключение в моем контроллере.

Я думал, что это будет брошено на привязку формы:

$form->bindRequest($request);

Но, похоже, это не так (я проверял это, а также проверял другие детали в моем контроллере).

Кроме того, я почти уверен, что вызвал исключение, потому что поле не появилось в пакете параметров (ничего не было возвращено из функции reverseTrasnform ().)

У кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 29 мая 2012

TransformationFailedExceptions приведет к неправильному полю в форме. Если вы хотите, чтобы исключение всплыло выше, бросьте другое исключение.

3 голосов
/ 05 марта 2012

Краткий ответ: нет.

Взгляните на Symfony \ Component \ Form \ Form :: bind ()

    try {
        // Normalize data to unified representation
        $normData = $this->clientToNorm($clientData);
        $synchronized = true;
    } catch (TransformationFailedException $e) {
    }

Так что TransformationFailedException молча игнорируются.Поведение немного озадачивает, но, скорее всего, вы пытаетесь выполнить проверку внутри трансформатора, а это не то, для чего предназначались трансформаторы.

Переместите код проверки ошибок в валидатор, и все должно встать на свои места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...