Может быть, я просто ничего не знал о решении своей проблемы и, черт возьми, может быть, оно встроено ... Я просто не смог найти такое решение. Я пассивно искал последние две недели и активно в течение последнего дня.
Как мне изящно обработать ограничение внешнего ключа в Symfony?
Я рассмотрел возможность перехвата исключения (Doctrine_Connection_Exception) и при условии, что это ограничение внешнего ключа, а затем переадресация пользователя в модуль ошибок с действием для ограничений внешнего ключа. Однако избыточность кода является ужасной, и даже если я добавлю ее в свой базовый класс действий, необходимость помещать блок try-catch вокруг каждого вызова базы данных станет уродливой. Не говоря уже о , предположение, что это исключение для ограничения внешнего ключа, является ужасной идеей, поскольку это исключение вызывается при наличии синтаксиса SQL и фактических ошибок соединения.
Я думал об использовании методов getPortableCode () и getPortableMessage () - которые унаследованы от класса исключения - чтобы определить, является ли это ограничением внешнего ключа (что они могут сделать), но они не дают абсолютно никакой информации о само ограничение. Например, когда генерируется исключение ограничения, getPortableCode () возвращает «-5», а getPortableMessage () возвращает «уже существует». Конечно, я мог бы выяснить, что не получилось, и вызвать ошибку для моего пользователя, если бы было одно ограничение, но, конечно, я усложнил ситуацию с несколькими ограничениями.
Во всяком случае, хватит моего бродяжничества, я пытаюсь выяснить, что другие разработчики делают в моей ситуации ... Кажется, это должно быть чем-то, что описано в неаккуратном "нежном введении".