2008-10-02 12 views
0

Je ne sais pas si je formulais la bonne question, mais quand même ...Comment puis-je envoyer des tableaux entre des vues à CakePHP

j'avoir une vue qui montre un embed flash et cette prise flash en tant que paramètre une URL /controller/action qui génère un XML. Je dois 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() comme ou je dois créer une URL spécifique pour envoyer ce tableau à cette action?

va Voici ma structure:

my_controller.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>"; 
+0

Avez-vous un contrôle sur le fichier SWF? Vous pouvez nettoyer cette architecture en faisant en sorte que l'objet SWF prenne XML en tant que flashVar au lieu du format de tableau intermédiaire. – Cheekysoft

Répondre

0

d'abord tout ce que vous ne pouvez pas envoyer des données d'une vue à l'autre de la manière dont vous parlez. Chacun de ces appels serait une demande distincte et cela signifie qu'il sort du cadre, puis de nouveau. Cela signifie que le cadre sera construit et démonté entre les appels, rendant impossible de transmettre les données entre les vues.

Maintenant, en ce qui concerne le tableau qui doit être envoyé à votre action, je suis complètement confus. Je ne pense pas que vous regardez le problème de la bonne façon. Si cette action nécessite un tableau de données et génère ensuite du code XML pour que l'objet Flash puisse l'obtenir, cela devient encore moins logique. Etes-vous sûr que l'Objet Flash n'est pas responsable de l'envoi de ce tableau de données à la Param que vous avez mentionnée? Eh bien, même si tout ce que vous dites doit être fait comme ça, je vous suggère de laisser tomber ce tableau sur le système de fichiers, puis de le ramasser 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 mon "ignorance" totale sur votre prédicat.

Je dois encore demander, n'est pas l'objet Flash va faire quelque chose dans tout cela?

+0

Je reçois juste une URL qui génère du XML ... cette URL est l'action d'un contrôleur dans mon cas ... –

+0

Je ne comprends toujours pas comment vous allez envoyer un tableau à cette action depuis l'extérieur du Flash et ensuite saura qu'il doit cracher XML quand l'objet Flash l'appelle. Votre nom est espagnol ou portugais, voulez-vous que je continue dans n'importe laquelle de ces langues? –

+0

J'ai clarifié mes intentions :) Mon nom est espagnol et je suis brésilien, je ne parle que portugais et anglais seulement ... Mon profil a comment me contacter. –

1

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

my_controller.php

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

xml_controller.php

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

Cependant, je l'ai entendu parler de certains problèmes lorsque le flash ne parfois pas envoyer des cookies de session, auquel cas, accole l'identifiant de session à l'URL de l'action:

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

et obtenir la session de retour:

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

Si le tableau est assez petit, puis sérialiser urlencode et l'ajouter comme paramter à l'URL pour votre action générer:

player.ctp

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

lire puis retour:

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

Vous pouvez envoyer un tableau avec les données d'une vue d'un contrôleur dans CakePHP comme celui-ci.

Pour le lien, vous pouvez passer des arguments:

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 puis.