Как перехватить исключения с помощью Symfony без отображения страницы httpException - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над созданием веб-приложения централизованной аутентификации с Symfony 3.4, и у меня возникла проблема с автоматическим управлением исключениями, которое обеспечивает Symfony. Проблема заключается в том, что я хочу перехватить исключение ConnectionException, возникающее в компоненте LDAP при сбое подключения к Active Directory. Цель состоит в том, чтобы использовать это исключение, чтобы замечать, когда оно терпит неудачу, и перенаправлять на определенную страницу. Но в тот самый момент, когда Exception вызывается компонентом LDAP, Symfony замечает событие kernel.exception и затем отображает страницу исключения отладки вместо того, чтобы позволить программе пойти и перехватить исключение. Как я могу решить эту проблему и быть уверенным, что Исключение перехвачено и используется моим кодом, а не автоматически Symfony?

Я присоединяю вас к образцу кода и отображаемой странице:

<?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;
        }
    }
}

Изображение страницы отображается автоматически

1 Ответ

0 голосов
/ 29 июня 2018

Вы ловите исключение, ничего не делая, а затем бросаете, это то же самое, что не пытаться перехватить код на этом уровне кода

Исходя из того, что вы сказали, используйте вашу платформу для перенаправления на определенную страницу из catch и любую другую логику, которую вы хотите запустить, когда возникает эта ошибка, затем удалите throw $ce;, что остановит запуск обработчика ошибок по умолчанию, который я Предположим, это Symfony's

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