Fork me on GitHub

Enregistrer des répertoires


Une application PHP moyenne peut contenir des dizaines, voire des centaines de classes. Enregistrer individuellement chaque classe avec Jaxon peut être fastidieux et générer des erreurs, en plus de produire un code verbeux.

Les classes d'une application PHP vont généralement être réparties dans plusieurs répertoires, chacun pouvant être associé à un namespace. La librairie Jaxon permet alors d'enregistrer en une fois toutes les classes présentes dans un répertoire.

Si on prend un répertoire /the/class/dir qui contient les classes suivantes.

Dans le fichier /the/class/dir/App/FirstClass.php

class FirstClass
{
    public function myMethod()
    {
        // Function body
    }
}

Dans le fichier /the/class/dir/App/SecondClass.php

class SecondClass
{
    public function myMethod()
    {
        // Function body
    }
}

Ces classes sont enregistrées avec Jaxon ainsi.

use function Jaxon\jaxon;

$jaxon = jaxon();
$jaxon->register(Jaxon::CALLABLE_DIR, '/the/class/dir');

En l'absence de namespace, le nom de la classe javascript sera celui de la classe PHP. Dans l'exemple ci-dessus, les noms des classes javascript seront FirstClass et SecondClass.

Voici le code javascript généré.

FirstClass = {};
FirstClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'FirstClass', jxnmthd: 'myMethod' },
        { parameters: arguments }
    );
};
SecondClass = {};
SecondClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'SecondClass', jxnmthd: 'myMethod' },
        { parameters: arguments }
    );
};

Définir les options des requêtes Jaxon

Des options supplémentaires peuvent être passées aux classes lors de leur enregistrement, et ajoutées aux appels en javascript. Pour cela, il faut passer à l'appel à $jaxon->register() un tableau dont chaque entrée définit les options d'une classe.

Les entrées sont indexées par le nom des classes javascript, qui dans ce cas est le nom de la classe PHP correspondante.

$jaxon->register(Jaxon::CALLABLE_DIR, '/the/class/dir', [
    'classes' => [
        'FirstClass' => [
            'functions' => [
                '*' => [
                    'mode' => "'asynchronous'"
                ]
            ]
        ],
        'SecondClass' => [
            'functions' => [
                '*' => [
                    'mode' => "'synchronous'"
                ]
            ]
        ]
    ]
]);

Voici le code javascript généré.

FirstClass = {};
FirstClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'FirstClass', jxnmthd: 'myMethod' },
        { parameters: arguments, mode: 'asynchronous' }
    );
};
SecondClass = {};
SecondClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'SecondClass', jxnmthd: 'myMethod' },
        { parameters: arguments, mode: 'synchronous' }
    );
};