Как передать переменную из Zend Framework в JavaScript / JQuery? - PullRequest
1 голос
/ 10 апреля 2010

как передать переменную из zf в javascript / jquery?

спасибо

Ответы [ 6 ]

5 голосов
/ 10 апреля 2010

вы можете создать свой javascript динамически, используя Headscript View Helper у него была такая функция:

<?php $this->headScript()->captureStart() ?>
var action = '<?php echo $this->baseUrl ?>';
$('foo_form').action = action;
<?php $this->headScript()->captureEnd() ?>

Источник: Документация ZF

2 голосов
/ 11 июля 2013

Я знаю, что это старый вопрос, но я уверен, что другие могли бы извлечь из этого пользу:

Вы можете использовать этот расширенный класс HeadScript и передавать переменные в JavaScript из контроллера следующим образом:

$this->view->headScript()->appendVar('dogName', 'Rocky')
                         ->appendVar('dogPictures', $pictures);

prependVar, setVar и offsetSetVar также доступны для удобства.

2 голосов
/ 10 апреля 2010
<?php
$this->view->foo = $foo;
?>

На ваш взгляд:

<script type="text/javascript">
var foo = <?=Zend_Json::encode($this->foo)?>;
</script>
1 голос
/ 23 сентября 2012

Я знаю, что это будет поздний ответ, и я использовал решение @chelmertz, но в настоящее время у меня возникли некоторые проблемы с этим. Я работаю в сложном приложении пользовательского интерфейса, и мне нужно было множество массивов php и других объектов json во внешних файлах javascript. И включение моих js-скриптов не было единообразным, поэтому каждый раз, когда мне нужно что-то от php до javascript, я должен проверять целые вещи вроде ....

1) Я помещаю appendScript () в правильное положение, чтобы скрипт some.js нашел мои переменные, определенные

2) сгенерированная строка, которая будет передана в appendScript (), является допустимым синтаксисом js. и многое другое ...

Есть еще один способ, который я специально разработал для Zend Framework. Я написал подробное руководство здесь http://rupeshpatel.wordpress.com/2012/09/21/add-json-objects-arrays-and-variables-from-php-to-javascript/

Резюме:

1) создать общий файл представления, заключенный в тег, который проверяет свойство (массив), скажем $ this-> jsVars объекта представления, и определяет переменные js
код этого вида файла

<script>
<?php if(!empty($this->jsVars)){ ?>

<?php
foreach($this->jsVars as $var) {
if($var['type'] == 'json'){
?>
var <?php echo $var['name']?> = JSON.parse('<?php echo $var['value'];?>');
<?php } elseif($var['type'] == 'text'){ ?>
var <?php echo $var['name']?> = "<?php echo $var['value'];?>";
<?php }else{?>
var <?php echo $var['name']?> = <?php echo $var['value'];?>;
<?php
}}?>

<?php }?>

</script>

2) визуализируйте это представление в файле макета до echo $this->headScript(), чтобы все внешние сценарии имели эти переменные js

<?php
echo $this->render('index/include_js_vars.phtml'); // rendering view

                $this->headScript()->prependFile(JS_BASE_URL.'/jquery-1.7.2.min.js');
$this->headScript()->appendFile(JS_BASE_URL.'/jquery.blockUI.js');
$this->headScript()->appendFile(JS_BASE_URL.'/commonJS.js');
$this->headScript()->appendFile('http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js');

                echo $this->headScript();
?>

3) добавить массивы php или объекты json в $ this-> view-> jsVars, например

// в вашем методе действия

$test = array('mango','orange','banana');
$this->view->jsVars[] = array('name'=>'test','type'=>'json','value'=>json_encode($test));

теперь test будет определяться в любом из ваших файлов сценариев как массив, независимо от того, в каком экземпляре вы включили файл js.

1 голос
/ 10 апреля 2010
<?php

class SomeController extends Zend_Controller_Action {
    public function indexAction() {
        // a file
        $this->view->headScript()->appendFile('yourJsFile.js');
        // inline script
        $message = 'hello!';
        $this->view->headScript()->appendScript("jQuery(function(){alert('$message');});");
    }
}

Для этого необходимо добавить echo $this->headScript() в скрипт вида или макета.

0 голосов
/ 04 апреля 2015

Я пришел сюда и попробовал все ответы, но ни один из них не помог мне, поэтому в итоге я сделал следующее (может быть, уже слишком поздно, но может быть полезно для кого-то другого):

Внутри контроллера, где вы хотите передать переменную в js:

public function someAction()
{
    $var = array(
        'test' => 'phpVar',
        'test2' => 'phpVar2'
    );

    $this->view->jsVar = $var;
}

Теперь в вашем макете, внутри тега head и перед загрузкой любого другого скрипта сделайте следующее:

$this->headScript()->appendScript('var phpVars='.json_encode($this->jsVar));

Наконец, в вашем js-файле вы сможете получить доступ к переменной phpVars:

console.log(phpVars);

вы можете увидеть в консоли:

Object {test: "phpVar", test2: "phpVar2"}

возможность доступа к каждой переменной, например phpVars.test и phpVars.test2

Теперь вы можете передавать переменные из вашего контроллера в js-файлы в любое время.

...