Pergunta

Eu não tenho certeza se eu formulei o direito pergunta, mas ainda assim ...

Eu tenho uma visão que mostra um flash incorporar e este flash tomada como parâmetro uma URL /controller/action que gera um XML. I nee para enviar, a partir deste ponto de vista, uma matriz para a ação gerador de XML. Como é a melhor maneira? Existe algum método helper->set() como ou eu tenho que criar uma URL específica para enviar essa matriz para que a ação?

Aqui vai minha estrutura:

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

Solução

Primeiro de tudo você não pode enviar dados a partir de um ponto de vista para outro da maneira que você está falando. Cada uma dessas chamadas seria um pedido separado e isso significa que ele sai do quadro e, em seguida, novamente. Isto significa que a estrutura será construída e derrubar entre chamadas, tornando impossível passar os dados entre as vistas.

Agora, em relação à matriz que tem de ser enviado para o seu ação, eu estou totalmente confuso. Eu não acho que você está olhando para o problema da maneira certa. Se essa ação precisa de uma matriz de dados e, em seguida, produzir XML para o objeto flash pode obtê-lo, então faz ainda menos sentido. Tem a certeza de que o objeto Flash não é o único responsável por enviar esse conjunto de dados para o Param você mencionou?

Bem, mesmo se tudo que você está dizendo tem que ser feito bem assim, eu vou sugerir que você deixar cair essa matriz no sistema de arquivos e, em seguida, buscá-lo quando a ação é chamado pelo flash.

Ou uma outra sugestão seria usar AJAX para enviar essa matriz para a ação.

Ambas as sugestões implicam meu "cluelessness" absoluta em seu predicado.

Eu ainda tenho que perguntar, não é o objeto Flash vai fazer algo em tudo isso?

Outras dicas

Se a matriz é pequeno o suficiente, serialize então urlencode-lo e adicioná-lo como um parâmetro para o URL para sua ação gerar:

player.ctp

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

, em seguida, lê-lo de volta:

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

Salvar a matriz na sessão, em seguida, na próxima solicitação para a ação gerador de XML, lê-lo de volta da sessão.

my_controller.php

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

xml_controller.php

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

No entanto, tenho ouvido de alguns problemas onde o flash às vezes não enviar cookies de sessão, caso em que, anexe o ID de sessão para o url da acção:

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

e para obter a volta da sessão:

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

Você pode enviar uma matriz com dados a partir de uma vista a um controlador no CakePHP assim.

Para o link que você pode passar argumentos:

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

Você pode, então, recuperá-los na ação do controlador da seguinte forma:

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

É claro que a matriz não deve ser muito grande, então.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top