Frage

Ich bin nicht sicher, ob ich die Frage richtig formuliert, aber immer noch ...

Ich habe eine Ansicht, die ein Flash einbetten und diese Flash-nehmen als Parameter eine /controller/action URL zeigt, die eine XML erzeugt. Ich nee, aus dieser Sicht zu senden, ein Array an den XML-Generator Aktion. Wie ist der beste Weg? Gibt es ein helper->set() Verfahren wie oder ich habe eine bestimmte URL zu erstellen, um diese Aktion dieses Array zu senden?

Hier geht meine Struktur:

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>";
War es hilfreich?

Lösung

Zu allererst Sie können keine Daten von einer Ansicht zur anderen in der Art und Weise Sie sprechen senden. Jeder dieser Anrufe wäre eine gesonderte Anfrage und dies bedeutet, dass sie aus dem Rahmen hinausgeht und dann wieder ein. Das bedeutet, dass der Rahmen gebaut werden und einreißen zwischen den Anrufen unmöglich macht, die Daten zwischen den Ansichten zu übergeben.

Nun in Bezug auf das Array, das auf Ihre Aktion werden muss gesendet werden, bin ich völlig verwirrt. Ich glaube nicht, dass Sie das Problem, den richtigen Weg suchen. Wenn diese Aktion eine Reihe von Daten benötigt und dann XML erzeugt so das Flash-Objekt, um es zu bekommen, dann ist es noch weniger Sinn. Sind Sie sicher, dass das Flash-Objekt nicht derjenige verantwortlich ist, dass Sie erwähnen, dass die Anordnung von Daten an die Param zu schicken?

Nun, auch wenn alles, was Sie sagen, ganz wie das getan werden muss, werde ich vorschlagen, dass Sie auf dem Dateisystem, das Array löschen und es dann abholen, wenn die Aktion vom Flash aufgerufen wird.

oder ein anderer Vorschlag wäre AJAX zu verwenden, das Array auf die Aktion zu senden.

Beiden Vorschläge implizieren meinen völligen „Ahnungslosigkeit“ auf dem Prädikat.

Ich habe immer noch zu fragen, ist nicht das Flash Object werde etwas tun, in das alles?

Andere Tipps

Wenn das Array klein genug ist, serialisiert dann urlencode es und fügen Sie es als Paramter auf die URL zu Ihrer generieren Aktion:

player.ctp

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

lesen Sie es dann wieder:

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

Speichern Sie die Array in der Sitzung dann in der nächsten Anforderung an die XML-Generator Aktion, lesen Sie es aus der Sitzung zurück.

my_controller.php

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

xml_controller.php

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

Allerdings habe ich von einigen Problemen gehört, in denen Flash manchmal nicht Session-Cookies nicht sendet, wobei in diesem Fall die Session-ID an die URL der Aktion anhängen:

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

und die Sitzung wieder:

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

Sie können einen Array mit Daten aus einer Ansicht mit einem Controller in CakePHP wie diese senden.

Um den Link können Sie Argumente übergeben:

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

Sie können dann abgerufen werden sie in der Controller-Aktion in folgenden Weise:

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

Natürlich sollte das Array nicht zu groß sein, dann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top