Question

Je ne suis pas sûr d'avoir bien formulé la question, mais quand même ...

J'ai une vue qui montre un flash intégré et ce flash prend en paramètre une URL / controller / action qui génère un XML. Je ne puis envoyer, à partir de cette vue, un tableau à l'action du générateur XML. Comment est la meilleure façon? Existe-t-il une méthode helper- > set () similaire ou je dois créer une URL spécifique pour envoyer ce tableau à cette action?

Voici ma structure:

mon_contrôleur.php

function player() {}

player.ctp

<div id="myDiv">Here it Goes</div>
<script type="text/javascript">
  var so = new SWFObject('player.swf','test','50','50','8');
  so.addVariable('file','/xml/generate'); // need to pass an array here
  so.write('myDiv');
</script>

xml_controller.php

public function generate() {
  // I need to read an array here
}

generate.ctp

echo "<xml><data>" . $array['contents'] . "</data>";
Était-ce utile?

La solution

Tout d’abord, vous ne pouvez pas envoyer de données d’une vue à une autre de la manière dont vous parlez. Chacun de ces appels constituerait une demande distincte, ce qui signifie qu'il sortait du cadre, puis rentrait à nouveau. Cela signifie que la structure sera construite et supprimée entre les appels, rendant impossible le transfert des données entre les vues.

Maintenant, en ce qui concerne le tableau qui doit être envoyé à votre action, je suis complètement dérouté. Je ne pense pas que vous regardiez le problème de la bonne façon. Si cette action nécessite un tableau de données et génère ensuite du XML afin que l'objet Flash puisse l'obtenir, cela n'a même pas de sens. Êtes-vous sûr que l'objet Flash n'est pas responsable de l'envoi de ce tableau de données au paramètre que vous avez mentionné?

Bien, même si tout ce que vous dites doit être fait comme cela, je vous suggère de supprimer ce tableau sur le système de fichiers, puis de le récupérer lorsque l'action est appelée par le Flash.

Ou une autre suggestion serait d'utiliser AJAX pour envoyer ce tableau à l'action.

Les deux suggestions impliquent que je suis "sans intelligence" et totalement; sur votre prédicat.

Je dois encore demander, l'objet Flash ne va-t-il pas faire quelque chose dans tout ça?

Autres conseils

Si le tableau est suffisamment petit, sérialisez-le, puis ajoutez-le en tant que paramètre à l'URL de votre action de génération:

player.ctp

so.addVariable('file','/xml/generate/<?php echo urlencode(serialize($array)); ?>');

puis relisez-le:

public function generate($array) {
  $array = unserialize($array);
}

Enregistrez le tableau dans la session, puis relisez-le à partir de la session lors de la prochaine requête à l'action du générateur XML.

mon_contrôleur.php

function player() {
  $this->Session->write('key', $array);
}

xml_controller.php

public function generate() {
  $array = $this->Session->read('key');
}

Cependant, j'ai entendu parler de problèmes qui empêchaient parfois Flash d'envoyer des cookies de session. Dans ce cas, ajoutez l'identifiant de session à l'URL de l'action:

so.addVariable('file','/xml/generate/<?php echo $session->id(); ?>');

et pour récupérer la session:

public function generate($sessionId) {
  CakeSession::id($sessionId);
  $array = $this->Session->read('key');
}

Vous pouvez envoyer un tableau contenant les données d'une vue à un contrôleur dans CakePHP comme ceci.

Vous pouvez transmettre des arguments au lien:

www.site.com/model/action/param1:foo/param2:test

Vous pouvez ensuite les récupérer dans l'action du contrôleur de la manière suivante:

$yourarray = $this->params['named'];

Bien sûr, le tableau ne devrait pas être trop grand alors.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top