yii2: пакет ресурсов не загружает ресурсы, когда я загружаю страницу с помощью метода renderPartial

У меня есть все мои файлы CSS и JavaScript в AppAsset, которые я загружаю в файл макета. На моей странице входа я не хочу использовать макет, поэтому я визуализирую файл представления входа с помощью метода renderPartial(). При этом я создал новый файл LoginAsset и использовал его для регистрации представления входа в систему, но мои CSS и JS все еще не загружаются. Я также попытался зарегистрировать представление входа в систему с помощью пакета AppAsset, но он также не загружает CSS и JS. Есть ли что-то, что я делаю неправильно? Как я могу загрузить свой набор активов при использовании renderPartial на моем контроллере?


person Zack    schedule 06.04.2015    source источник
comment
Где вы регистрируете этот пакет активов? Похоже на макет, который не отображается с помощью renderPartial.   -  person arogachev    schedule 06.04.2015
comment
Вы пробовали метод renderAjax?   -  person Pavel Bariev    schedule 06.04.2015
comment
Я регистрирую пакет ресурсов в макете, но я также пытался зарегистрировать тот же набор ресурсов в представлении входа в систему. Я также попытался создать новый пакет ресурсов и зарегистрировать его на странице входа в систему, но он все равно не загружается.   -  person Zack    schedule 06.04.2015
comment
Здравствуйте, Пол, я новичок в Yii2 и не совсем знаком с методом renderAjax. Позвольте мне прочитать об этом.   -  person Zack    schedule 06.04.2015
comment
Привет Павел, спасибо за подсказку! Это сработало после того, как я использовал метод renderAjax(), но я действительно не знаю, почему. Учитывая, что метод renderAjax добавляет вызовы beginPage(), head(), beginBody(), endBody() и endPage(), я думаю, что, возможно, мой вход в систему не смог загрузить пакет активов, поскольку в нем этого не было. Я до сих пор не понимаю, как он работает так же, как и renderPartial, а не рендер, как указано в документации. Я буду читать больше об этом.   -  person Zack    schedule 06.04.2015


Ответы (2)


Привет, @Zack, твоя проблема в том, что ты не указал местонахождение конечной части тела и конечной страницы. Я решил свою проблему, добавив эти коды в нижнюю часть моей страницы.

<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
person veyselsahin    schedule 10.02.2016

Как сказал Павел, вы должны использовать renderAjax(). См. объяснение ниже.

Вывод renderPartial() представляет собой кусок HTML, сгенерированный представлением без каких-либо CSS и JS:

<div class="container">
   <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
   <input type="password" id="loginform-password" class="form-control" name="LoginForm[password]">
   <button type="submit" class="btn btn-primary btn-block" name="login-button">Log in</button>
</div>

Но renderAjax() добавляет CSS и JS из всех зарегистрированных ресурсов в представлении к выходным данным:

<link href="/assets/f1759119/css/bootstrap.css" rel="stylesheet">
<div class="container">
   <input type="text" id="loginform-username" class="form-control" name="LoginForm[username]">
   <input type="password" id="loginform-password" class="form-control" name="LoginForm[password]">
   <button type="submit" class="btn btn-primary btn-block" name="login-button">Log in</button>
</div>
<style>
   ...
</style>
<script>
   ...
</script>
<script src="/assets/13aa7b5d/jquery.js"></script>
<script src="/assets/302a2946/yii.js"></script>
<script src="/assets/302a2946/yii.activeForm.js"></script>

PS. Я думаю, что правильный путь - создать отдельный макет для формы входа и использовать обычный метод render().

person Anton Rybalko    schedule 23.11.2016