Fork me on GitHub

Enregistrer des répertoires avec des namespaces


Si un répertoire est associé à un namespace, il est possible de l'indiquer lorsqu'il est enregistré avec Jaxon. Le nom des classes javascript prendra ce namespace en compte.

Si on prend un répertoire /the/class/dir associé au namespace Ns et qui contient les classes suivantes.

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

namespace Ns\App;

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

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

namespace Ns\App;

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

Les classes PHP seront enregistrées ainsi.

use function Jaxon\jaxon;

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

Les noms des classes javascript seront Ns.App.FirstClass et Ns.App.SecondClass.

Voici le code javascript généré.

Ns = {};
Ns.App = {};
Ns.App.FirstClass = {};
Ns.App.FirstClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'Ns.App.FirstClass', jxnmthd: 'myMethod' },
        { parameters: arguments }
    );
};
Ns.App.SecondClass = {};
Ns.App.SecondClass.myMethod = function() {
    return jaxon.request(
        { jxncls: 'Ns.App.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 complet de la classe PHP correspondante, avec son namespace.

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

Voici le code javascript généré.

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