#php #symfony #ldap
#php #symfony #ldap
Вопрос:
Я впервые использую LDAP вместе с PHP / symfony: я успешно подключаюсь к серверу LDAP и могу выполнять поиск и добавлять пользователей / группы, большой проблемы нет. Однако, когда я пытаюсь добавить пользователя, который уже существует, я получаю следующее предупреждение:
Внутренняя ошибка сервера HTTP 500
Предупреждение: ldap_add(): Добавить: уже существует
Я хотел бы перехватить его, поскольку оно выдает исключение и может быть заменено простым сообщением «Сбой: CN уже используется» для пользователя.
Однако я не могу найти способ сделать это и не понимаю, почему symfony выдает такое исключение, где ldap_add должен возвращать «false» только при сбое. (Оно действительно возвращает true при успешном выполнении): руководство по ldap_add
РЕДАКТИРОВАТЬ: Вот инкриминируемый код. Параметры в порядке, запрос выполняется успешно, когда я создаю нового пользователя.
Я попробовал несколько методов, чтобы перехватить ошибку, но, похоже, невозможно перехватить предупреждение
try {
$result = ldap_add($ldapconn, $userdn, $user);
} catch(Throwable $e) {
echo $e->getMessage();
}
Комментарии:
1. Можете ли вы показать нам свой код?
2. Конечно, оно обновлено
Ответ №1:
По умолчанию Symfony преобразует предупреждение в исключения… Только в среде разработки
Это разумный выбор, который позволяет избежать сбоя вашей рабочей среды в случае возникновения непредвиденного поведения в рабочей среде.
В случае ошибки, функция ldap_add вернет false. Это то, что вы должны проверить. Возможно, вы захотите полностью отключить предупреждение, вы можете сделать это с помощью @ldap_add
вместо этого.
Тем не менее, здесь есть 2 альтернативы.
- Возможно, вы захотите использовать безопасную библиотеку PHP, она преобразует предупреждения в исключения. Вот пример: https://github.com/thecodingmachine/safe
- Вы также можете временно настроить свой собственный прослушиватель ошибок, который будет выдавать исключение, на самом деле иногда Symfony делает это в своей собственной кодовой базе. И вот пример: https://github.com/symfony/symfony/blob/27d84dbe57ce65203b26232b87e6660fdba2f30e/src/Symfony/Component/String/AbstractString.php#L509 Самое главное — не избегать восстановления исходного обработчика ошибок.
Надеюсь, я помог!