Компонент Ldap

Компонент Ldap предоставляет способы для соединения с LDAP-сервером (OpenLDAP или Активным каталогом).

Установка

1
$ composer require symfony/ldap

Также вы можете клонировать репозиторий https://github.com/symfony/ldap.

Note

If you install this component outside of a Symfony application, you must require the vendor/autoload.php file in your code to enable the class autoloading mechanism provided by Composer. Read this article for more details.

Использование

Класс Ldap предоставляет методы для аутентификации и запросов к LDAP-серверу.

Класс Ldap использует AdapterInterface, чтобы общаться с LDAP-сервером. adapter для встроенного расширения LDAP PHP, к примеру, может быть сконфигурирован, используя следующие опции:

host
IP или имя хоста LDAP-сервера

port

Порт, используемый для доступа к LDAP-серверу
version
Версия LDAP-протокола для использования
encryption
Протокол шифрования: ssl, tls или none (по умолчанию)
connection_string
Ві можете использовать эту опцию вместо host и port, чтобы подключиться к LDAP-серверу
optReferrals
Указывает, следовать ли автоматически по ссылкам, возвращённым LDAP-сервером
options
Опции LDAP-сервера, определённые в ConnectionOptions

Например, чтобы присоединиться к start-TLS защищённому LDAP-серверу:

1
2
3
4
5
6
use Symfony\Component\Ldap\Ldap;

$ldap = Ldap::create('ext_ldap', array(
    'host' => 'my-server',
    'encryption' => 'ssl',
));

Или вы можете напрямую указать строку подключения:

1
2
3
use Symfony\Component\Ldap\Ldap;

$ldap = Ldap::create('ext_ldap', array('connection_string' => 'ldaps://my-server:636'));

Метод bind() аутентифицирует ранее сконфигурированную связь, используя как различимое имя (РИ), так и пароль пользователя:

1
2
3
4
use Symfony\Component\Ldap\Ldap;
// ...

$ldap->bind($dn, $password);

После привязки (или если вы включили анонимную аутентификацию на вашем LDAP-сервере), вы можете запросить LDAP-сервер, используя метод find():

1
2
3
4
5
6
7
8
9
use Symfony\Component\Ldap\Ldap;
// ...

$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$results = $query->execute();

foreach ($results as $entry) {
    // Сделать что-то с результатами
}

По умолчанию, записи LDAP загружаются лениво. Если вы хотите извлечь все сущности за один вызов и сделать что-то с массивом результатов, вы можете использовать метод toArray():

1
2
3
4
5
6
7
use Symfony\Component\Ldap\Ldap;
// ...

$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$results = $query->execute()->toArray();

// Сделать что-то с массивом результатов

Создание или обновление записей

Компонент Ldap предоставляет инструменты для создания, обновления или даже удаления LDAP записей:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Ldap\Entry;
// ...

$entry = new Entry('cn=Fabien Potencier,dc=symfony,dc=com', array(
    'sn' => array('fabpot'),
    'objectClass' => array('inetOrgPerson'),
));

$entryManager = $ldap->getEntryManager();

// Создание новой записи
$entryManager->add($entry);

// Поиск и обновление существующей записи
$query = $ldap->query('dc=symfony,dc=com', '(&(objectclass=person)(ou=Maintainers))');
$result = $query->execute();
$entry = $result[0];
$entry->setAttribute('email', array('[email protected]'));
$entryManager->update($entry);

// Добавление или удаление значений аттрибутам с несколькими значениями более эффективно, чем использование update()
$entityManager->addAttributeValues($entry, 'telephoneNumber', array('+1.111.222.3333', '+1.222.333.4444'));
$entityManager->removeAttributeValues($entry, 'telephoneNumber', array('+1.111.222.3333', '+1.222.333.4444'));

// Удаление существующей записи
$entryManager->remove(new Entry('cn=Test User,dc=symfony,dc=com'));

Массовое обновление

Используйте метод менеджера записей applyOperations() для обновления нескольких аттрибутов за раз:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use Symfony\Component\Ldap\Ldap;
use Symfony\Component\Ldap\Entry;
// ...

$entry = new Entry('cn=Fabien Potencier,dc=symfony,dc=com', array(
    'sn' => array('fabpot'),
    'objectClass' => array('inetOrgPerson'),
));

$entryManager = $ldap->getEntryManager();

// Добавление нескольких email адресов за раз
$entryManager->applyOperations($entry->getDn(), array(
    new UpdateOpteration(LDAP_MODIFY_BATCH_ADD, 'mail', '[email protected]'),
    new UpdateOpteration(LDAP_MODIFY_BATCH_ADD, 'mail', '[email protected]'),
));

Возможные типы операций: LDAP_MODIFY_BATCH_ADD, LDAP_MODIFY_BATCH_REMOVE, LDAP_MODIFY_BATCH_REMOVE_ALL, LDAP_MODIFY_BATCH_REPLACE. Параметр $values должен быть NULL при использовании типа операции LDAP_MODIFY_BATCH_REMOVE_ALL.

New in version 4.2: Метод applyOperations() появился в Symfony 4.2.

New in version 4.1: Методы addAttributeValues() и removeAttributeValues() появились в Symfony 4.1.

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.