четверг, 19 января 2017 г.

Использование расширений в обход композера

Иногда необходимо подключить расширение Yii2 в обход Composer.

Например, в каком-то расширении обнаружился досадный баг. Сообщили разработчикам, ждём исправления... Но что делать с нашим приложением, пока баг не исправлен?

Можно исправить код прямо в папке "vendor". Но этого делать не стоит - в первую очередь потому, что править придётся на каждой машине, где установлено приложение, включая продакшн. И при любом обновлении файлы затрутся.

Выход - подключить расширение в обход стандартного механизма Composer. Это делается легко.

1. Удаляем расширение из зависимостей Composer.
composer remove coolvendor/coolextension

2. Качаем нужную версию расширения из репозитория в виде архива, распаковываем в какую-нибудь папку проекта. Например, "common/external/coolvendor/coolextension-1.0.0".

3. Указываем алиас в соответствии с именем расширения.
return [
    ...
    'aliases' => [
        '@coolvendor/coolextension' => '@common/external/coolvendor/coolextension-1.0.0',
        ...
    ]
];

Готово!

Можем пользоваться расширением, с тем же удобством, как если оно было подключено через Composer.

Когда необходимость в отдельном подключении отпадёт - например, разработчики исправили мешающий баг - можно легко и быстро вернуть расширение на своё место. Удаляем папку расширения, удаляем алиас, подключаем расширение через Composer.

среда, 18 января 2017 г.

Подключение AdminLTE в приложении Advanced

AdminLTE - симпатичная и простая тема для админки сайта.

Разберём, как подключить её в Advanced-приложение Yii2 вместо стандартной темы.

1. Подключаем расширение с темой AdminLTE.
composer require dmstr/yii2-adminlte-asset

2. Удаляем файл стандартной вёрстки - он нам уже не нужен.
"backend/web/css/site.css"

3. Открываем папку "vendor\dmstr\yii2-adminlte-asset\example-views\yiisoft\yii2-app".
Берём оттуда шаблоны, копируем в свой проект в папку "backend\views", заменяем содержимое по своему вкусу, настраиваем внешний вид, вёрстку.
Пример уже обработанных файлов, можно посмотреть в моём проекте "nex-otaku/yii2-app-ganimede".

4. При необходимости, настроить некоторые параметры темы можно в яваскрипте.
https://almsaeedstudio.com/themes/AdminLTE/documentation/index.html#adminlte-options

Отладка htaccess в OpenServer

Правильная настройка htaccess - та ещё морока.

Иногда, всё настроил вроде бы правильно, но где-то что-то не работает, по неизвестным причинам.

Выяснить, в чём же дело, нам поможет отладка.

Открываем в меню Опенсервера:
Отладка -> Конфигурация -> Apache-2.4

В блокнотах откроются два шаблона конфигурации. Нас интересует большой конфигурационный файл от сервера: Apache-2.4_server.conf

Ищем строку "LogLevel warn" в разделе "Конфигурация сообщений об ошибках".

Меняем на следующий текст:
LogLevel warn rewrite:trace8

Теперь модуль mod_rewrite расскажет нам всё о своей работе в логе Апача.

В меню Опенсервера выбираем
Просмотр логов -> Apache отладка

По завершению отладки, не забываем поменять настройку обратно. Иначе файл лога расплодится до неприличных размеров.

вторник, 3 января 2017 г.

Очистка кеша "aptitude"

Чистим кеш "aptitude" - стандартного менеджера пакетов в Ubuntu.

sudo apt-get clean
sudo apt-get autoclean
sudo apt-get autoremove

Зачем это может понадобиться? Чтобы освободить побольше места.

После установки Ubuntu и накатывания последних обновлений, кеш aptitude сильно разрастается. Файлы кеша могут занимать сотни мегабайт. Для тарифов с малым объёмом диска это может быть критично.

Чистим кеш после всех обновлений, и у нас снова полно свободного места )

понедельник, 26 декабря 2016 г.

Ошибка "Не удалось проверить переданные данные" при отправке формы в Yii2

На Yii2 сделана защита от CSRF-атак. Когда она срабатывает, то при отправке формы вы получаете ошибку "Не удалось проверить переданные данные".

Я столкнулся с тем, что эта ошибка появлялась случайным образом. В итоге выяснилось, что проблема в настройках куки.

Два моих приложения, "backend" и "frontend", имели разный код для шифровки кук: "cookieValidationKey". Он настраивается в файле "config/main-local.php" для каждого из приложений.

Из-за этого, открыв сначала страницу на одном приложении, а потом на другом, сбрасывался CSRF-код - ведь шифровали куки с одним ключом, а расшифровывать пытаемся с другим.

Решение: прописать в конфигах одинаковые значения для "cookieValidationKey". Теперь всё работает )

четверг, 22 декабря 2016 г.

Решение конфликтов при слиянии для файлов Composer.

Как решить конфликты файлов "composer.lock" и "composer.json" при слиянии веток?

Обычно ситуация такая. Вы в своей ветке добавляете новые пакеты Composer, ваш напарник тоже добавляет новые пакеты Composer в своей ветке.
Оба файла "composer.json" и "composer.lock" при этом находятся в репозитории.

Попытавшись вытянуть изменения напарника, сделать слияние веток, вы скорее всего получите конфликт по обоим файлам. А если он ещё делал "composer update" по всем пакетам, то это практически гарантированно.

Не беспокойтесь, решается это достаточно просто.

1. Посмотрите composer.json - какие изменения были от вас, а какие от напарника.
Особенно запомните, какие изменения вносили вы.

2. Сбросьте оба файла на "внешнюю" версию ("theirs"). Таким образом, содержимое у них будет как в той ветке, из которой вы тянете изменения в свою.
Конфликты отмечаем как решённые, завершаем слияние.
Прогоняем "composer install". Вытянутся пакеты напарника.

3. Добавьте ваши изменения ещё раз. Это занимает немного времени, написать один или несколько раз "composer require" для нужных вам пакетов.

Теперь можно выкатывать обновлённые файлы "composer.json" и "composer.lock", они будут корректно работать.

суббота, 3 декабря 2016 г.

Создание проекта Yii2 по шаблону Ганимед

Ганимед - это мой шаблон для быстрой разработки сайтов. В него включены все минимально необходимые модули и настройки.

Шаблон разработан на базе "yiisoft/yii2-app-advanced".

https://github.com/Nex-Otaku/yii2-app-ganimede

Установка

1. Используем репозиторий https://github.com/Nex-Otaku/yii2-app-ganimede

Запускаем консоль OpenServer.
cd domains
composer create-project --prefer-dist --stability=dev nex-otaku/yii2-app-ganimede myhost.local

2. После установки
cd myhost.local
init
0
y

3. Создаём БД в менеджере БД.

4. Настраиваем подключение.

Указываем IP, указанный в настройках OpenServer,
либо "localhost", если не настроен доступ к серверу по локальной сети.
common/config/main-local.php
'dsn' => 'mysql:host=my.super.host.ip;dbname=mysuperdbname',

5. Запускаем миграцию, которая поднимает необходимые таблицы.
Запускаем консоль OpenServer.
cd domains
cd myhost.local
yii migrate