13.Zend Framework 2 et 3

13.8.LDAP

13.8.5.L'écriture dans l'annuaire

13.8.5.1.Ajout d'un objet

La bibliothèque zend-ldap permet également d'ajouter des objets dans la structure LDAP pour cela l'objet Ldap[en savoir plus] instancié précédemment propose la méthode add() qui attend 2 paramètres:
  • Le DN de l'objet à insérer (ex: "cn=jdupond,dc=mondomaine,dc=com"). Ce peut être une chaîne de caractères ou un object Zend\Ldap\Dn
  • Un tableau associatif des attributs de l'objet à insérer, avec pour clé le nom de l'attribut (peu importe la casse) et pour valeur la valeur de l'attribut (ex: une chaîne de caractères) ou un tableau de valeurs (selon que l'attribut est multi-valué ou pas). Dans tous les cas, la liste des attributs devra inclure "objectClass" avec pour valeur(s) la ou les noms de classes dans lesquelles sont déclarés le ou les autres attributs.
<?php
// A priori ce bout de code devrait faire partie d'un projet plus global qui
// inclus déjà la bibliothèque zend-ldap (le "require_once" qui suit devrait
// être inutile voire pourrait poser problème).
// Mais pour utiliser cet exemple seul, il convient de faire l'include
// nécessaire. Ce qui dans le cas d'une installation de zend-ldap via composer
// peut se faire avec la ligne suivante (adapter le chemin au besoin)
require_once('vendor/autoload.php');
use Zend\Ldap\Ldap;

$params = [
    'host' => 'ldap.phpfacile.com',
    'port' => 389, // Port par défaut = 389
    'username' => 'cn=admin,dc=phpfacile,dc=com',
    'password' => 'motDePasseSecret',
    'baseDn' => 'ou=redacteurs,dc=phpfacile,dc=com'
];
$ldap = new Ldap($params);
$ldap->add('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
           [
                'sn' => 'Dupond',
                'telephoneNumber' => '+33 0 00 00 00 00',
                'description' => ['Description 1',
                                  'Description 2'],
                'objectClass' => 'person'
           ]
        );
?>
<?php
// A priori ce bout de code devrait faire partie d'un projet plus global qui
// inclus déjà la bibliothèque zend-ldap (le "require_once" qui suit devrait
// être inutile voire pourrait poser problème).
// Mais pour utiliser cet exemple seul, il convient de faire l'include
// nécessaire. Ce qui dans le cas d'une installation de zend-ldap via composer
// peut se faire avec la ligne suivante (adapter le chemin au besoin)
require_once('vendor/autoload.php');
use Zend\Ldap\Ldap;

$params = array(
    'host' => 'ldap.phpfacile.com',
    'port' => 389, // Port par défaut = 389
    'username' => 'cn=admin,dc=phpfacile,dc=com',
    'password' => 'motDePasseSecret',
    'baseDn' => 'ou=redacteurs,dc=phpfacile,dc=com'
);
$ldap = new Ldap($params);
$ldap->add('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
           array(
                'sn' => 'Dupond',
                'telephoneNumber' => '+33 0 00 00 00 00',
                'description' => array('Description 1',
                                       'Description 2'),
                'objectClass' => 'person'
            )
        );
?>
Exemple dans le cas d'un objet avec des attributs issus de différentes classes:
<?php
// A priori ce bout de code devrait faire partie d'un projet plus global qui
// inclus déjà la bibliothèque zend-ldap (le "require_once" qui suit devrait
// être inutile voire pourrait poser problème).
// Mais pour utiliser cet exemple seul, il convient de faire l'include
// nécessaire. Ce qui dans le cas d'une installation de zend-ldap via composer
// peut se faire avec la ligne suivante (adapter le chemin au besoin)
require_once('vendor/autoload.php');
use Zend\Ldap\Ldap;

$params = [
    'host' => 'ldap.phpfacile.com',
    'port' => 389, // Port par défaut = 389
    'username' => 'cn=admin,dc=phpfacile,dc=com',
    'password' => 'motDePasseSecret',
    'baseDn' => 'ou=redacteurs,dc=phpfacile,dc=com'
];
$ldap = new Ldap($params);
$ldap->add('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
           [
               'sn' => 'Dupond',
               'uid' => 'jdupond', // posixAccount (requis)
               'uidNumber' => '1100', // posixAccount (requis)
               'gidNumber' => '1111', // posixAccount (requis)
               'homeDirectory' => '/home/jdupond', // posixAccount (requis)
               'postalAddress' => 'rue du tutoriel', // organizationalPerson
               'objectClass' => ['organizationalPerson', 'posixAccount']
           ]
        );
?>
<?php
// A priori ce bout de code devrait faire partie d'un projet plus global qui
// inclus déjà la bibliothèque zend-ldap (le "require_once" qui suit devrait
// être inutile voire pourrait poser problème).
// Mais pour utiliser cet exemple seul, il convient de faire l'include
// nécessaire. Ce qui dans le cas d'une installation de zend-ldap via composer
// peut se faire avec la ligne suivante (adapter le chemin au besoin)
require_once('vendor/autoload.php');
use Zend\Ldap\Ldap;

$params = array(
    'host' => 'ldap.phpfacile.com',
    'port' => 389, // Port par défaut = 389
    'username' => 'cn=admin,dc=phpfacile,dc=com',
    'password' => 'motDePasseSecret',
    'baseDn' => 'ou=redacteurs,dc=phpfacile,dc=com'
);
$ldap = new Ldap($params);
$ldap->add('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
           array(
                'sn' => 'Dupond',
                'uid' => 'jdupond', // posixAccount (requis)
                'uidNumber' => '1100', // posixAccount (requis)
                'gidNumber' => '1111', // posixAccount (requis)
                'homeDirectory' => '/home/jdupond', // posixAccount (requis)
                'postalAddress' => 'rue du tutoriel', // organizationalPerson
                'objectClass' => array('organizationalPerson', 'posixAccount')
            )
        );
?>
warning Il convient de bien préciser, a minima, les valeurs de l'ensemble des attributs requis par les classes précisées dans objectClass.
rem
  • Si l'objet existe déjà une exception Zend\Ldap\Exception\LdapException sera levée. Vous pourrez alors envisager de faire un appel à la méthode update() que nous verrons juste après
  • Si vous souhaitez laisser la bibliothèque zend-ldap décider de faire un appel à add() ou update() en fonction de l'existence ou non de l'objet alors vous pouvez faire appel à la méthode save() (qui présente la même interface que ces 2 méthodes)

13.8.5.2.Mise à jour d'un objet

Pour modifier les attributs d'un objet on pourra utiliser la méthode update() avec pour paramètres:
  • Le DN de l'objet à modifier
  • Un tableau associatif où les clés sont les noms des attributs (peu importe la casse) et les valeurs du tableau sont les valeurs des attributs
<?php
$ldap->update('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
              [
                'telephoneNumber' => '+33 0 00 00 00 00',
              ]
             );
?>
<?php
$ldap->update('cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
              array(
                'telephoneNumber' => '+33 0 00 00 00 00',
              )
             );
?>