Pregunta

No estoy seguro de haber formulado la pregunta correctamente, pero aún así ...

Tengo una vista que muestra una incrustación de flash y esta toma de flash como parámetro de una URL / controller / action que genera un XML. Tengo que enviar, desde esta vista, una matriz a la acción del generador XML. ¿Cómo es la mejor manera? ¿Existe algún método helper- > set () o tengo que crear una URL específica para enviar esta matriz a esa acción?

Aquí va mi estructura:

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>";
¿Fue útil?

Solución

En primer lugar, no puede enviar datos de una vista a otra de la manera en que habla. Cada una de esas llamadas sería una solicitud por separado y esto significa que sale del marco y luego vuelve a entrar. Esto significa que el marco se construirá y derribará entre las llamadas, haciendo imposible pasar los datos entre las vistas.

Ahora, en lo que respecta a la matriz que debe enviarse a su acción, estoy completamente confundido. No creo que estés viendo el problema de la manera correcta. Si esa acción necesita una matriz de datos y luego produce XML para que Flash Object pueda obtenerla, entonces tiene menos sentido. ¿Está seguro de que Flash Object no es el responsable de enviar esa matriz de datos al parámetro que mencionó?

Bueno, incluso si todo lo que está diciendo tiene que hacerse así, le sugeriré que suelte esa matriz en el sistema de archivos y luego la retire cuando la acción sea llamada por Flash.

O otra sugerencia sería usar AJAX para enviar esa matriz a la acción.

Ambas sugerencias implican mi total " desorientación " en su predicado.

Todavía tengo que preguntar, ¿no va a hacer algo el Objeto Flash en todo esto?

Otros consejos

Si la matriz es lo suficientemente pequeña, serialice, urlencode y agregue como parámetro a la url a su acción de generar:

player.ctp

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

luego léelo de nuevo:

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

Guarde la matriz en la sesión y luego, en la siguiente solicitud de la acción del generador XML, léala de nuevo desde la sesión.

my_controller.php

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

xml_controller.php

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

Sin embargo, he oído hablar de algunos problemas en los que flash a veces no envía cookies de sesión, en cuyo caso, agregue el ID de sesión a la url de la acción:

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

y para recuperar la sesión:

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

Puedes enviar una matriz con datos de una vista a un controlador en CakePHP de esta manera.

Al enlace puedes pasar argumentos:

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

Luego puede recuperarlos en la acción del controlador de la siguiente manera:

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

Por supuesto, la matriz no debería ser demasiado grande entonces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top