如何在不渲染httpException页面的情况下使用symfony捕获异常

时间:2018-06-29 14:14:33

标签: php symfony events

我正在使用Symfony 3.4开发集中式身份验证Web应用程序,但遇到了Symfony提供的异常自动管理问题。问题是,当与Active Directory的连接失败时,我想捕获LDAP组件引发的ConnectionException。目的是使用此异常来通知它何时失败并重定向到特定页面。但是在LDAP组件引发异常的那一刻,Symfony注意到了kernel.exception事件,然后呈现了调试异常页面,而不是让程序去捕获异常。 我该如何解决该问题,并确保由我的代码而不是由Symfony自动捕获并使用了Exception?

我将代码示例和呈现的页面与您一同加入:

<?php

namespace App\Utils;

use App\Entity\User;
use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Ldap\Exception\ConnectionException;

class ActiveDirectoryStuff
{
    private $domain = 'myDomain';

    private $ldapString = 'ldap://';

    public function __construct()
    {}

    public function connection($username, $password)
    {
        try {
            $dn = $username.'@'.$this->domain;
            $ldap = Ldap::create('ext_ldap', array(
                'connection_string' => $this->ldapString . $this->domain, 
            ));
            $ldap->bind($dn, $password); //where the ConnectionException is raised
            return $ldap;
        } catch (\ConnectionException $ce) {
            throw $ce;
        }
    }
}

Image of the Page Rendered Automatically

1 个答案:

答案 0 :(得分:0)

您正在捕获异常,不执行任何操作然后将其抛出,这与在此级别的代码上没有try catch相同。

根据您所说的使用框架从捕获中重定向到特定页面以及发生此错误时要运行的任何其他逻辑,然后删除throw $ce;,这将阻止运行默认错误处理程序我认为是Symfony的