Gestion du contexte dans des hooks

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Gestion du contexte dans des hooks

par savageman » 29 mai 2008, 00:11

Peut-être récupérer les variables définies avec avec debug_backtrace() ?
Moi, bourrin ? :roll:

par momox » 28 mai 2008, 23:25

Une sorte de callback nan ?

par rami » 28 mai 2008, 22:37

Ca sert à intercaler son propre code dans une librairie, framework, etc. afin de faire un traitement spécial sans avoir à toucher à la librairie ;)

par docdamien » 28 mai 2008, 21:56

un hook c'est un crochet tu as jamais vu peter pan en VO ? :p
Ah bon.

Et en PHP, ça sert à quoi :?:

par Hywan » 28 mai 2008, 21:55

Question d'un débutant dans le nullissisme , réponse d'un maître dans le nullissisme … ^^

Hook veut dire hameçon ou crochet. En gros, tu le places dans ton code, et l'utilisateur peut s'y « accrocher » pour exécuter un code. C'est une base de plugin en gros.

Voir : Hook (informatique), sur Wikipédia.

par SAEVEAS » 28 mai 2008, 21:52

un hook c'est un crochet tu as jamais vu peter pan en VO ? :p

par docdamien » 28 mai 2008, 21:28

juste une question de nul typique:

C'est quoi un hook :?: :!:

par Hywan » 28 mai 2008, 20:23

Attention. Je pense que tu le sais très bien mais les globals sont assez dangereuses. Alors gaffe :).

Sékil a posé un bon problème. Les variables sont locales à la fonction. Soit. N'utilise pas de fonction mais ne travaille qu'avec des fichiers (en gros : une fonction = un fichier). C'est encore une autre solution.

par Genova » 28 mai 2008, 20:14

Merci pour les réponses,
ce que tu proposes naholyr est ce qui se rapprocherait le plus de ce que je recherche, malheureusement je ne peux pas me permettre de passer les variables en paramètres, je préfère à la limite utiliser le mot clef "global" dans la fonction que l'utilisateur aura définit. J'ai pas mal éplucher la documentation et je ne vois pas de moyens pour déplacer le contexte malheureusement, je vais donc me contenter de globaliser les variables dont j'aurai besoin.

@HyWaN : un système de hook est un outil parmi plusieurs autres pour une bonne gestion de plugins je pense.

par naholyr » 28 mai 2008, 01:19

Pour moi le mieux est de passer ton contexte sous forme de tableau associatif dans ta fonction trigger. À l'aide de compact() et extract() ça donne des choses pas trop lourdes et ça marche comme tu l'entendais.
function header() 
{ 
   $mavariable = 42; 

   $hook->trigger('header', compact('mavariable'));
}
Et
class Hook {
  //...
  public function trigger($event, $context = array()) {
    extract($context);
    include 'event.' . $event . '.php';
  }
}
Note : les includes pour du code, c'est très mal :( autant utiliser des fonctions, genre la fonction event_nom-du-hook($context).

par Sékiltoyai » 28 mai 2008, 00:48

Euh non, si les variables sont locales à la fonction header, elles ne seront pas visibles dans la méthode trigger et donc, le cas échéant, dans tout fichier, inclu dans la méthode trigger.
Et je ne pense pas que ce soit réglable facilement…

par Hywan » 27 mai 2008, 23:28

Hey :),

Normalement, avec un include basique ça devrait fonctionner. Il faut que $hook->trigger inclue le fichier et si tu utilises tes variables — précédemment définies — dans ce fichier, alors il n'y a pas de soucis (voir le manuel, le premier exemple illustre cette idée).

Peut-être qu'un bon système de plugin serait plus pertinent (même si ça y ressemble beaucoup) :-k.

Gestion du contexte dans des hooks

par Genova » 27 mai 2008, 16:06

Bonjour,
j'aimerai pouvoir implémenter un système de hook dans l'application sur laquelle je bosse, c'est à dire poser à certains points clefs du programme une méthode
$hook->trigger('nom_du_point_clef');
qui irai me chercher des codes externs situés dans un dossier nom_du_point_clef et me les exécuter (eval ou include, à voir).

J'aimerai que ces codes externes puissent avoir accès au contexte de la fonction dans laquelle j'appel mon hook, est ce possible de gérer cela ?

Exemple (index.php)
function header()
{
   $mavariable = 42;

   $hook->trigger('header');
}
ensuite j'aurai un fichier hookheader.php inclus, et dans ce fichier je veux accéder à $mavariable. Est ce possible d'une façon ou d'une autre, ou est ce que je devrais ruser à coup de globale ?

Merci pour la réponse !