Domanda

Non sono sicuro di aver formulato la domanda nel modo giusto, ma comunque ...

Ho una vista che mostra un flash incorporato e questo flash prende come parametro un URL / controller / action che genera un XML. Devo inviare, da questo punto di vista, un array all'azione del generatore XML. Come è il modo migliore? Esiste un metodo helper- > set () come o devo creare un URL specifico per inviare questo array a quell'azione?

Ecco la mia struttura:

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>";
È stato utile?

Soluzione

Prima di tutto non puoi inviare dati da una vista all'altra nel modo in cui stai parlando. Ognuna di queste chiamate sarebbe una richiesta separata e questo significa che esce dal framework e poi di nuovo dentro. Ciò significa che il framework verrà creato e abbattuto tra le chiamate, rendendo impossibile il passaggio dei dati tra le visualizzazioni.

Ora per quanto riguarda l'array che deve essere inviato alla tua azione, sono completamente confuso. Non penso che tu stia esaminando il problema nel modo giusto. Se quell'azione ha bisogno di una matrice di dati e quindi produce XML in modo che l'oggetto Flash possa ottenerla, ha ancora meno senso. Sei sicuro che l'oggetto Flash non sia il responsabile dell'invio di quell'array di dati al parametro che hai citato?

Bene, anche se tutto ciò che stai dicendo deve essere fatto in questo modo, ti suggerirò di rilasciare quell'array sul file system e poi raccoglierlo quando l'azione viene chiamata da Flash.

O un altro suggerimento sarebbe di usare AJAX per inviare quell'array all'azione.

Entrambi i suggerimenti implicano la mia totale "mancanza di chiarezza" sul tuo predicato.

Devo ancora chiedere, l'oggetto Flash non farà qualcosa in tutto questo?

Altri suggerimenti

Se l'array è abbastanza piccolo, serializza quindi urlencode e aggiungilo come parametro all'URL per la tua azione generate:

player.ctp

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

quindi rileggilo:

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

Salvare l'array nella sessione, quindi nella successiva richiesta all'azione del generatore XML, rileggerlo dalla sessione.

my_controller.php

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

xml_controller.php

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

Tuttavia, ho sentito di alcuni problemi in cui a volte Flash non invia cookie di sessione, nel qual caso, aggiungi l'id di sessione all'URL dell'azione:

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

e per riavere la sessione:

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

Puoi inviare un array con i dati da una vista a un controller in CakePHP in questo modo.

Al collegamento è possibile passare argomenti:

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

È quindi possibile recuperarli nell'azione del controller nel modo seguente:

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

Ovviamente l'array non dovrebbe essere troppo grande allora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top