PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了完整性约束错误时,定义错误消息大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

当我尝试删除项目时出现完整性约束错误时,我试显示一个不错的错误消息.

而不是出现严重错误500,我只想显示一条消息:
“您无法删除它,因为某些项目已@L_772_8@到它”

我已经搜索了一段时间,但是我总是找到“如何解决错误”的解决方案.我不会解决它,我只想捕捉错误,就像带有消息参数的@UniqueEntity批注一样.

解决方法:

您可以实现一个监听PDOException的EventListener:

@H_675_14@// src/CM/PlatformBundlee/EventListener/PDOExceptionResponseListener.PHP

namespace CM\PlatformBundle\EventListener;

use Symfony\Component\httpFoundation\Response;
use Doctrine\DBAL\Driver\PDOException;
use Symfony\Component\httpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\httpFoundation\Session\SessionInterface;

class PDOExceptionResponseListener
{
    public function __construct(SessionInterface $session) 
    {
        $this->session = $session;
    }

    /**
     * @param GetResponseForExceptionEvent $event
     */
    public function onKernelResponse(GetResponseForExceptionEvent $event)
    {
        $request = $event->getrequest();

        $exception =  $event->getException();
        $message = $exception->getmessage();

        // Listen only on the expected exception
        if (!$exception instanceof PDOException) {
            return;
        }

        // You can make some checks on the message to return a different response depending on the MysqL error given.
        if (strpos($message, 'Integrity consTraint violation')) {
            // Add your user-friendly error message
            $this->session->getFlashBag()->add('error', 'PDO Exception :'.$messagE);   
        }
    }
}

声明为服务:

@H_675_14@// app/config/services.yml
services:
    acme.kernel.listener.pdo_exception_response_listener:
        class: CM\PlatformBundle\EventListener\PDOExceptionResponseListener
        tags:
            - {name: kernel.event_listener, event: kernel.exception, method: onKernelResponsE}
        arguments: 
            session: "@session"

使您的模板显示会话消息:

@H_675_14@// twig
{% for flashmessage in app.session.flashbag.get('error') %}
    {{ flashmessage }} 
{% endfor %}

编辑

如果要在特定操作上拦截错误,可以执行以下操作:

@H_675_14@try {
    $em->flush();
} catch (\Exception $E) {
    $errormessage = $e->getmessage();
    // Add your message in the session
    $this->get(‘session’)->getFlashBag()->add('error', 'PDO Exception :'.$errormessagE);   
}

大佬总结

以上是大佬教程为你收集整理的完整性约束错误时,定义错误消息全部内容,希望文章能够帮你解决完整性约束错误时,定义错误消息所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: