Задать вопрос
@pashaa

Почему alias @web пустой и не настраивается?

//Yii::setAlias('web',  dirname(dirname(__DIR__)) . '/web');  Если сделать так то вываливается куча    //ошибок 404 (site.css,main.js).
$this->registerJs('@web/js/main-index.js',      // Uncaught SyntaxError: Invalid or unexpected token
        $this::POS_HEAD,'main-index');
?>
<h1>main/index</h1>
<p>
    <?= print_r(Yii::$aliases);  ?> // @web => пусто. 
</p>

В разметке выглядит вот так
<script type="text/javascript">@web/js/main-index.js</script>.


Проблему решил.
  • Вопрос задан
  • 134 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Вы явно перепутали 2 метода
$this->registerJs
и
$this->registerJsFile
Первый регистрирует кусок js кода и ожидает первым параметром получить строку, второй регистрирует файл и ожидает строку с путем к файлу, в том числе заменяет алиасы. Так что первый выводит именно то что должен. Просто смените метод.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
Вообще все алисы прописываются в конфиге, я так понимаю вы пытаетесь задать алиас во вьюхе.
//Yii::setAlias('web',  dirname(dirname(__DIR__)) . '/web');  Если сделать так то вываливается куча    //ошибок 404 (site.css,main.js).

У вас @web уже определен, но вы пытаетесь его переопределить, но по другому пути dirname(dirname(__DIR__)) . '/web' потому Yii больше не находит каталоги css и js, отсюда куча ошибок 404.

Теперь далее. Прочтите внимательно формат $this->registerJs, там первый параметр это код JS. У вас же строка '@web/js/main-index.js', именно потому вы получаете полную ерунду типа
<script type="text/javascript">@web/js/main-index.js</script>


Подключение внешний js скриптов осуществляется в файле assets/AppAsset.php
Во вьюхе можно явно подключить ассеты с помощью AppAsset::register($this)
Можно создавать свои собственные классы подключения и регистрировать в представлениях.

Чтобы получить значение @web, вызывайте
echo Yii::getAlias('@web');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы