В Yii передайте переменные PHP в JavaScript - PullRequest
3 голосов
/ 18 января 2012

В моем JavaScript (с использованием jQuery) есть целый набор PHP-переменных, к которым мне нужен доступ. Хотя у меня это работает, просто создав файл JavaScript в виде представления, а затем используя renderPartial(), чтобы отобразить JavaScript внутри основного представления.

Тем не менее, это, очевидно, не очень элегантно, поэтому я хотел бы знать, как это сделать в Yii. Я смотрел на менеджер активов, но это похоже на статические файлы JavaScript - вы не можете включить туда PHP (если я не ошибаюсь).

Есть ли другой способ сделать это?

Ответы [ 6 ]

2 голосов
/ 18 января 2012

Вы можете рассмотреть registerScript .На мой взгляд, это лучше, поскольку есть параметр с именем $ position, который может помочь вам контролировать вывод процесса render ().

2 голосов
/ 18 января 2012

В вашем подходе нет ничего неправильного или не элегантного, и да, ресурсы - это статический контент (JS, CSS и т. Д.), Не связанный с проблемой.

По сути, вы можете представить значение переменной PHP только в JS, написав его как часть кода PHP. Если вам нужно только это значение в ограниченной области, то вы можете просто записать его как встроенную константу (что, например, делают некоторые виджеты). Если вам нужно, чтобы он был доступен в вашем JS-коде, единственный вариант - создать JS-код, как вы делаете сейчас.

Не обязательно создавать новое частичное представление для ваших переменных PHP-JS, но это также неплохая идея. Если вы довольны этим, во что бы то ни стало используйте его.

1 голос
/ 10 июня 2016

См. Yii2 - Документация по клиентским сценариям , вы можете использовать функцию registerJS для передачи переменных в javascipt. Например:

/* @var $this yii\web\View */
$this->registerJs(
    "var calenderEvents = ".Json::encode($calenderEvents).";", 
    yii\web\View::POS_HEAD, 
    'calender-events-script'
);
1 голос
/ 02 июля 2013

Установка переменных в массиве key => value и использование CJSON :: encode работает очень хорошо. Вы можете получить доступ ко всем вашим переменным через объект, созданный в jQuery's parseJSON. Например:

$myVarList = array(
 'nameOne'=>$valueFromAnotherVar,
 'nameTwo'=>$object->coolValue,
 'nameThree'=>$cat->hoursSleptToday()
);

Yii::app()->clientScript->registerScript("myVarList",
    'myVarList = jQuery.parseJSON('.CJSON::encode($myVarList).');'

Затем вы можете получить доступ к значениям из глобальной переменной.

myVarList.nameOne || myVarList.nameTwo || myVarList.nameThree
1 голос
/ 05 января 2013

Один из подходов состоит в том, чтобы установить глобальную переменную небольшим скриптом и redisterScript (), а затем использовать эту переменную в реальном js

0 голосов
/ 13 октября 2014

Попробуйте сделать это следующим образом:

$ myVarList = array (
'nameOne' => $ valueFromAnotherVar,
'nameTwo' => $ object-> coolValue,
'nameThree' => $ cat-> hoursSleptToday ()
);

$ json = addlashes (CJSON :: encode ($ myVarList));

Yii :: app () -> clientScript-> registerScript ("myVarList", 'myVarList = jQuery.parseJSON("'. $ json.'"); ');

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