Enregistrer des fonctions PHP
- Version 4.x
- Version 3.x
- Version 2.x
Avant de pouvoir appeler une classe ou une fonction PHP avec javascript, celle-ci doit etre enregistrée, ou déclarée.
Pour cela on utilise la fonction register()
de Jaxon.
Pour enregistrer une fonction, on appelle la fonction register
avec le paramètre Jaxon::CALLABLE_FUNCTION
.
use Jaxon\Jaxon;
use function Jaxon\jaxon;
function hello_world($isCaps)
{
$response = jaxon()->newResponse();
$text = ($isCaps) ? 'HELLO WORLD!' : 'Hello World!';
$response->assign('div2', 'innerHTML', $text);
return $response;
}
$jaxon->register(Jaxon::CALLABLE_FUNCTION, "hello_world");
Après avoir été enregistrée, cette fonction peut être appelée en javascript avec le nom jaxon_hello_world()
.
Le préfixe jaxon_
est défini à l'aide de l'option de configuration core.prefix.function
.
Voici le code javascript généré par Jaxon, et envoyé dans le navigateur.
jaxon_hello_world = function() {
return jaxon.request(
{ jxnfun: 'helloWorld' },
{ parameters: arguments }
);
};
Voici un exemple de code HTML qui appelle la fonction PHP enregistrée avec Jaxon.
<input type="button" value="Submit" onclick="jaxon_hello_world()" />
Le nom de la fonction javascript peut être changé avec un alias.
$jaxon->register(Jaxon::CALLABLE_FUNCTION, "hello_world", ["alias" => "sayHello"]);
<input type="button" value="Say Hello" onclick="jaxon_sayHello(0)" />
Une méthode d'une classe peut aussi être enregistrée comme une fonction.
Pour cela, le nom de la classe doit être passé à la fonction register()
, comme dans l'exemple suivant.
use Jaxon\Jaxon;
use function Jaxon\jaxon;
class HelloWorld
{
public function hello_world($isCaps)
{
$response = jaxon()->newResponse();
$text = ($isCaps) ? 'HELLO WORLD!' : 'Hello World!';
$response->assign('div2', 'innerHTML', $text);
return $response;
}
}
$jaxon = jaxon();
$jaxon->register(Jaxon::CALLABLE_FUNCTION, "hello_world", ["class" => HelloWorld::class]);
<input type="button" value="Submit" onclick="jaxon_hello_world()" />
De même, un alias peut être défini.
$jaxon->register(Jaxon::CALLABLE_FUNCTION, "hello_world", ["class" => HelloWorld::class, "alias" => "sayHello"]);
<input type="button" value="Submit" onclick="jaxon_sayHello()" />