Зависит от содержимого, хранящегося внутри $value
.
Если это базовая строка без одинарных / двойных кавычек внутри, то будет работать следующий код:
<script>
var value='{{ @value }}';
</script>
Если это целое число, будет работать следующий код:
<script>
var value={{ @value }};
</script>
... хотя ваша IDE, вероятно, сообщит об ошибке синтаксиса.
Если это число с плавающей точкой, будет работать следующий код:
<script>
var value={{ str_replace(',', '.', @value) }};
</script>
... и ваша IDE также, вероятно, сообщит об ошибке синтаксиса. Примечание: str_replace
для неанглийских локалей, для которых десятичный разделитель установлен в запятую.
Для всех остальных (строки, включая кавычки или массивы) вы должны преобразовать свои данные в JSON, используя один из следующих методов:
Техника 1:
Преобразование данных в JSON и вывод их в объект JS.
// controller.php (JSON encode)
$f3->set('data',json_encode($data));
<!-- template.html -->
<script>
var data={{ @data | raw }};
</script>
Плюсы: простота использования.
Минусы: ваша IDE сообщит об ошибке синтаксиса + дополнительный вызов raw
.
Техника 2:
Конвертировать данные в JSON, выгрузить их в строку JS и проанализировать.
// controller.php (JSON encode + escape double quotes)
$f3->set('data',str_replace('\\u0022','\\\\u0022',
json_encode($data,JSON_HEX_APOS|JSON_HEX_QUOT)));
<!-- template.html -->
<script>
var data=JSON.parse('{{ @data | raw }}');
</script>
Минусы: менее прост в использовании + дополнительный вызов raw
.
Плюсы: ваша IDE не будет сообщать ни о какой синтаксической ошибке.
Техника 2bis:
Внедрить технику 2 в шаблонный фильтр F3.
// index.php
$tpl=Template::instance();
$tpl->filter('safejson',function($data){
$raw=\View::instance()->raw($data);
return str_replace('\\u0022','\\\\u0022',
json_encode($raw,JSON_HEX_APOS|JSON_HEX_QUOT));
});
<!-- template.html -->
<script>
var data=JSON.parse('{{ @data | safejson }}');
</script>
Плюсы: простота использования + ваша IDE не будет сообщать ни о какой синтаксической ошибке.
Минусы: дополнительный звонок на raw
.
Техника 3:
Преобразование данных в JSON и встраивание их в атрибут DOM data-
.
// controller.php (JSON encode)
$f3->set('data',json_encode($data));
<!-- template.html -->
<div id="foo" data-json="{{ @data }}"></div>
<script>
var data=JSON.parse(document.getElementById('foo').dataset.json);
</script>
Плюсы: простота в использовании + ваша IDE не будет сообщать ни о какой синтаксической ошибке + без дополнительных вызовов raw
.