Yii2 зарегистрировать код js в представлении
каков наилучший способ регистрации кода js в представлении yii2?
1
<?php
$this->registerJs(
'$("document").ready(function(){ alert("hi"); });'
);
?>
2
<?php
$this->registerJs('alert("hi");', View::POS_READY);
?>
3
<?php
$script = "function test() { alert('hi');}";
$this->registerJs($script, View::POS_END, 'my-options');
?>
4 ответов
Yii2, напишите код в представлениях
<h2>Content</h2>
<?php
$script = <<< JS
alert("Hi");
JS;
$this->registerJs($script);
?>
<?php
$this->registerJs( <<< EOT_JS_CODE
// JS code here
EOT_JS_CODE
);
?>
таким образом, вам не нужно избегать JS-кода
https://www.yiiframework.com/doc/guide/2.0/en/output-client-scripts
Я создал тривиальный виджет, который позволяет мне поддерживать код в чистоте и разрешать правильный синтаксический анализ IDE.
общие / виджет / InlineScript.в PHP
<?php namespace common\widgets;
/**
* Easily add JS to the end of the document.
*/
class InlineScript {
/**
* Open output buffer.
*/
public static function listen() {
ob_start();
}
/**
* Capture the output buffer and register the JS.
*
* @param yii\web\View $view The view that should register the JS.
*/
public static function capture($view) {
$view->registerJs(preg_replace('~^\s*<script.*>|</script>\s*$~ U', '', ob_get_clean()));
}
}
пример использования (в поле зрения)
<?php ob_start(); ?>
<script>
alert('asd');
</script>
<?php $this->registerJs(preg_replace('~^\s*<script.*>|</script>\s*$~ U', '', ob_get_clean())) ?>
как вы видите, это использует выходные буферы, поэтому нужно быть осторожным в использовании этого. Если каждый listen()
не следует exaclty one capture()
вы можете попасть в кошмар отладки:)
Я предпочитаю использовать виджет richardfan:
use richardfan\widget\JSRegister;
<?php JSRegister::begin(['position' => static::POS_BEGIN]); ?>
<script>
alert('Hello world');
</script>
<?php JSRegister::end(); ?>