Вообщем все стало на свои места. Это баг yii2 который кое как решили очищением стилей.
yii\widgets\Pjax - 144 row
// Do not re-send css files as it may override the css files that were loaded after them.
// This is a temporary fix for https://github.com/yiisoft/yii2/issues/2310
// It should be removed once pjax supports loading only missing css files
$view->cssFiles = null;
Причем если мы рендерим через renderAjax стили дублируются, а если через pjax они их чистят. Вообщем в одном случае забили. А в другом закрыли все.
Максим Тимофеев: Не должен, но цепляет. Пример из базовой версии yii. Потому ничего поломано быть не может. Потому использование правильно априори =)
Теперь по поводу регистрации в head. Хорошая попытка, но нет.
<?php
\yii\widgets\Pjax::begin(['id' => 'pjax-container']);
if(Yii::$app->request->isPjax) {
$this->registerCssFile('test.css');
$this->registerJsFile('test.js', ['position' => \yii\web\View::POS_HEAD]);
} else {
echo \yii\helpers\Html::button('Load Pjax', ['onclick' => "$.pjax.reload({container:'#pjax-container'});"]);
}
\yii\widgets\Pjax::end();
?>
js регистрирует, css нет.
Максим Тимофеев: в заглавии темы я написал что хочу выяснить как регистрировать css файлы при использовании pjax. Поскольку yii ведет себя очень странно. js файлы регистрируются, а css нет. Хотя логично если бы ничего не регистрировалось или наоборот все как это делает renderAjax.
Пример показывает регистрацию стилей при рендере через pjax. Я сделал еще более простой пример
1. Совсем не обязательно. Мало того указанный пример специально максимально упрощен. Вы критикуете hello world за вывод текста прямо с контроллера =)
2. Вы опять привязались к примеру и почему то предположили что я пытаюсь скрывать блоки. А я лишь максимально просто показал проблему регистрации стилей при выводе контента через pjax.
3. Отличие pjax от ajax примерно как отличие php от yii2 =) Принцип работы pjax очень прост. Это вкрапление динамического изменения элементов страниц с изменение url через pushState. Дополнительно yii2 по запросу понимает pjax запросы и вырезает контент с pjax виджета. Что между прочим совсем не обязательно.
4. Я с вами не согласен. Какой контент будет возвращать yii на запросы pjax скрипта это проблема сугубо yii. И то что yii на основе запроса вырезает необходимую часть это только фишка yii. За которую стоит их похвалить. Рассмотрим 2 сценария. 1. pjax должен возвращать ТОЛЬКО расположенный в нем контент. В этом случае мы не должны получить регистрацию js файлов при запросе. А мы получаем.
2. Yii должен регистрировать все необходимые скрипты при запросе. А в этом случае мы получаем ответ на регистрацию js. Но тогда почему не было регистрации css.
Я в примере указал что если часть контента мы выводим через View::renderAjax то проходит регистрация js и css. Что логично и правильно.
Теперь более реальный пример использования pjax который вызовет указанную мной проблему. Раз мой пример вам не понравился.
Каталог объектов. Через pjax мы отображаем подробнее объекта. И на странице подробнее мы регистрируем дополнительный css необходимый для отображения этой страницы. И итоге у нас та же проблема. Css не подгрузится.
Богдан Пасечник: ступил. redirect_uri_mismatch не выдает. Я получаю вот этот результат
[
'access_token' => '...'
'token_type' => 'Bearer'
'expires_in' => 3600
]
И refresh_token в нем нету. Если тоже делаю на локалхосте я получаю refresh_token.
Допустим сразу редиректит потому что я уже раньше давал доступ.
Да на {url} приходит $_GET['code'].
Я делаю пост запрос с параметрами идентичными вашим. В результате если адреса на локалхосте я получаю код
[
'access_token' => '...'
'token_type' => '...'
'expires_in' => 3600
'refresh_token' => '...'
]
А если тоже самое повторяю уже на сервере я так же получаю code. И когда выполняю пост запрос с ним получаю вот это.
[
'error' => 'redirect_uri_mismatch'
]
denis_milyukov: самый простой способ это использовать библиотеку https://github.com/azproduction/jquery.notification
Она решает все проблемы.
Второй способ которым пользуются многие сайты. В настройках профиля пользователя он может включить всплывающие сообщения. При клике на галочку включения вы запускаете процесс вывода и пользователь подтверждает свое решение. После этого будут работать нотификации
Влад Животнев: ставил apt-get-ом. На сервере не запускал никаких скриптов. В целом сайт был запущен и спокойно себе работал без вмешательства. Давно была попытка установить asterisk на этом сервере. Она не увенчалась успехом. После ничего не ставилось.
Влад Животнев: настройка сервера была примитивная. Грубо говоря поставил apache, mysql. Залил файлы и запустил сайт. Потому все было от рута. Теперь я понимаю что я идиот... Но когда это делалось мне так не казалось =) Думалось что раз пароль 14 символьный и сгенерированный то беспокоится не о чем.
Влад Животнев: logrotate уже сработал. взлом я обнаружил поздно. Сайт исправно работал уже когда его взломали. Я зашел в phpmyadmin и обнаружил что в базах данных нет таблиц. Это удивило поскольку все работало. Я перезагрузил сервак и после этого обнаружил что проблема была намного серьезнее. Файлы базы были уже закодированы давно.
Вот скриншот зашифрованных файлов mysql clip2net.com/s/3ncgvUx
WinSCP говорит что владелец root.
Влад Животнев: хорошо я пришлю на вашу почту доступ к серверу в пятницу. С сервера все равно толку нет в таком его виде. Потому он нужен только что бы понять как был осуществлен взлом.
Вот логи за 25 число. Именно тогда все зашифровали https://yadi.sk/i/ybOs351AiwQ3Z
Я нашел там много попыток неудачной авторизации. Также много ip адресов с Китая и Кореи.
vyachin: в этом случае конечно будет заполнятся автоматически. Я писал про вариант без afterFind. А вариант с afterFind как мне кажется не лучше того что описал в задаче я (с геттером и сеттером).
Спасибо за ответ. Я только что дополнил вопрос своим решением.
Я знал про timestampAttribute. На сколько я понял необходимо добавить свойство в модель some_time_date. прописать валидатор ['someTimeDate', 'date', 'format' => 'php:d.m.Y', 'timestampAttribute' => 'some_time']
Но есть проблема. Свойство some_time_date не будет заполнятся значением даты автоматически. При работе с формой это не так страшно. Но если some_time_date у меня required, то просто получив модель я не смогу ее сохранить.
Formatter позволит перевести дату в необходимый формат. Вопрос заключается в том что в моделе свойство у меня int. А в форме выводится в формате dd.yyyy.MM и в этом же формате передается в модель. Где в свою очередь оно уже int.
Я решал эту задачу различными способами. Но пока не нашел изящного
yii\widgets\Pjax - 144 row
// Do not re-send css files as it may override the css files that were loaded after them.
// This is a temporary fix for https://github.com/yiisoft/yii2/issues/2310
// It should be removed once pjax supports loading only missing css files
$view->cssFiles = null;
Причем если мы рендерим через renderAjax стили дублируются, а если через pjax они их чистят. Вообщем в одном случае забили. А в другом закрыли все.