Fork me on GitHub

Enregistrer des classes PHP


Les classes

La section app.classes de la configuration contient un tableau de classes à exporter.

En voici un exemple.

class HelloWorld
{
    public function sayHello($isCaps)
    {
        $response = jaxon()->newResponse();
        $text = ($isCaps) ? 'HELLO WORLD!' : 'Hello World!';
        $response->assign('div2', 'innerHTML', $text);
    }

    public function setColor($sColor)
    {
        $response = jaxon()->newResponse();
        $response->assign('div2', 'style.color', $sColor);
    }
}
    'app' => [
        'classes' => [
            'HelloWorld',
            'OtherClass',
        ],
    ],
use Jaxon\Jaxon;

jaxon()->register(Jaxon::CALLABLE_CLASS, HelloWorld::class);

Après avoir été enregistrée, les méthodes publiques de la classe sont dans une classe javascript nommée HelloWorld.

Voici le code javascript généré par Jaxon.

JaxonHelloWorld = {};
JaxonHelloWorld.sayHello = function() {
    return jaxon.request(
        { jxncls: 'HelloWorld', jxnmthd: 'sayHello' }, { parameters: arguments }
    );
};
JaxonHelloWorld.setColor = function() {
    return jaxon.request(
        { jxncls: 'HelloWorld', jxnmthd: 'setColor' }, { parameters: arguments }
    );
};

Définir les options

Des options peuvent être ajoutées aux méthodes des classes.

    'app' => [
        'classes' => [
            'HelloWorld' => [
                'functions' => [
                    'setColor' => [
                        'mode' => "'synchronous'"
                    ],
                    '*' => [
                        'mode' => "'asynchronous'"
                    ],
                ],
            ],
        ],
    ],
use Jaxon\Jaxon;

jaxon()->register(Jaxon::CALLABLE_CLASS, HelloWorld::class, [
    'functions' => [
        'setColor' => [
            'mode' => "'synchronous'"
        ],
        '*' => [
            'mode' => "'asynchronous'"
        ]
    ]
]);

Le code javascript généré est le suivant.

JaxonHelloWorld.sayHello = function() {
    return jaxon.request(
        { jxncls: 'HelloWorld', jxnmthd: 'sayHello' }, { parameters: arguments, mode: 'asynchronous' }
    );
};
JaxonHelloWorld.setColor = function() {
    return jaxon.request(
        { jxncls: 'HelloWorld', jxnmthd: 'setColor' }, { parameters: arguments, mode: 'synchronous' }
    );
};

Autoloading d'une classe

Lors de l'enregistrement d'une classe, l'option include permet d'indiquer le chemin du fichier dans lequel la classe est définie.

use Jaxon\Jaxon;

jaxon()->register(Jaxon::CALLABLE_CLASS, HelloWorld::class, ['include' => '/path/to/dir/HelloWorld.php']);

Ce fichier sera inclus dans l'application uniquement si une méthode de la classe est appelée.