Как отправить массивы между представлениями в CakePHP - PullRequest
0 голосов
/ 02 октября 2008

Я не уверен, правильно ли я сформулировал вопрос, но все же ...

У меня есть представление, которое показывает встроенную флэш-память, и эта флэш-память принимает в качестве параметра /controller/action URL, который генерирует XML. Мне нужно отправить из этого представления массив в действие генератора XML. Как лучше? Есть ли какой-нибудь метод helper->set(), подобный или я должен создать определенный URL для отправки этого массива в это действие?

Вот моя структура:

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>";

Ответы [ 4 ]

2 голосов
/ 02 октября 2008

Если массив достаточно мал, сериализуйте его, затем urlencode и добавьте в качестве параметра к URL-адресу вашего действия создания:

player.ctp

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

затем прочитайте его обратно:

public function generate($array) {
  $array = unserialize($array);
}
1 голос
/ 02 октября 2008

Сохраните массив в сеансе, затем в следующем запросе к действию генератора XML прочитайте его обратно из сеанса.

my_controller.php

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

xml_controller.php

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

Однако я слышал о некоторых проблемах, когда flash иногда не отправляет сеансовые куки-файлы, и в этом случае добавляет идентификатор сеанса к URL-адресу действия:

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

и вернуть сеанс:

public function generate($sessionId) {
  CakeSession::id($sessionId);
  $array = $this->Session->read('key');
}
0 голосов
/ 10 марта 2012

Вы можете отправить массив с данными из представления на контроллер в CakePHP следующим образом.

На ссылку можно передать аргументы:

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

Затем их можно получить в действии контроллера следующим образом:

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

Конечно, массив не должен быть слишком большим.

0 голосов
/ 02 октября 2008

Прежде всего, вы не можете отправлять данные из одного представления в другое так, как вы говорите. Каждый из этих вызовов будет отдельным запросом, и это означает, что он выходит за рамки, а затем снова. Это означает, что структура будет построена и разрушена между вызовами, что сделает невозможным передачу данных между представлениями.

Теперь, что касается массива, который должен быть отправлен на ваше действие, я совершенно сбит с толку. Я не думаю, что вы смотрите на проблему правильно. Если для этого действия требуется массив данных и затем создается XML, чтобы объект Flash мог его получить, тогда это имеет еще меньший смысл. Вы уверены, что Flash Object не является единственным ответственным за отправку этого массива данных в указанный вами параметр?

Что ж, даже если все, что вы говорите, должно быть сделано именно так, я предлагаю вам сбросить этот массив в файловой системе, а затем взять его, когда Flash вызывает действие.

Или другое предложение - использовать AJAX для отправки этого массива в действие.

Оба предложения подразумевают мою полную "невежественность" в отношении вашего предиката.

Мне все еще нужно спросить, не будет ли Flash Object что-то делать во всем этом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...