понедельник, 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

Автоматический вход SSH с помощью ключей

Задача: полностью автоматизировать вход пользователя на сервер посредством putty, по протоколу SSH.

Для этого нам понядобятся ключи авторизации SSH.


1. Создаём ключ на сервере.
ssh-keygen -t rsa

2. Сохраняем ключ в предлагаемый файл (/home/myuser/.ssh/id_rsa)

3. При необходимости указываем пароль на использование приватного ключа.
В этом случае его необходимо будет вводить при каждой новой сесии.

4. Копируем публичный ключ id_rsa.pub в authorized_keys
cd .ssh
cp id_rsa.pub authorized_keys

6. Проверяем права на файл. 
Должны быть 600, иначе может не сработать. Если права отличаются, устанавливаем значение 600.
chmod 600 authorized_keys

7. Копируем приватный ключ id_rsa в файл на локальном комьютере (например my_session.ppk)
more id_rsa

8. Прогоняем скопированный приватный ключ через puttygen.exe делая приватный ключ пригодным к использованию. (Там есть кнопочка "Load", напротив надписи "Load an existing private key file", юзаем сначала ее, а затем нажимаем "Save private key".)

9. Открываем Putty, загружаем нашу сессию, идем в SSH->Auth, указываем путь к готовому приватному ключу.

10. Идем в Connection->Data и в секции Auto-login в поле username указываем логин сессии

11. При необходимости в пункте меню SSH в поле Remote Command можно указать команду, которая автоматически будет выполняться при входе пользователя.

12. Сохраняем сессию.

13. Делаем отдельный ярлык Putty, в котором указываем имя сессии, чтобы при запуске ярлыка нужная сессия запускалась автоматически.
"C:\Program Files (x86)\PuTTY\putty.exe" -load "mycoolproject"

Всё готово. Теперь по клику на ярлык откроется консоль на вашем сервере. Удобно и безопасно.

Инструкцию нашёл здесь: http://xpoint.ru/forums/computers/os/unix/thread/40057.xhtml

Развёртывание проекта с BitBucket на удалённый сервер.

1. Выбираем публичный ключ SSH, он хранится в файле "/.ssh/id_rsa.pub" в домашней папке.
Если его нет, создаём по инструкции.
Копируем содержимое ключа в буфер обмена.

Внимание: если вы копируете ключ с экрана Putty, то в буфере обмена ключ может быть разбит на несколько строк. Нам это не нужно. Уберите переводы строк. Весь ключ должен быть в одной длинной-длинной строке.

2. В настройках репозитория Битбакета добавляем в разделе "Access keys".
Теперь пользователь может читать из репозитория без ввода пароля, доступ осуществляется по ключу.

3. Клонируем репозиторий.
git clone CoolUser@bitbucket.org:CoolUser/cool-repo.git

четверг, 17 ноября 2016 г.

Развёртывание существующего проекта Yii2 для разработки.

Вам нужно развернуть проект на Yii2 для разработки.

У вас установлен и настроен OpenServer на локальной машине.

1. Клонируем репозиторий в папку доменов OpenServer. 

Называем папку проекта, например, "my-cool-project.local".

2. После успешного клонирования, устанавливаем файлы окружения.

Запускаем консоль OpenServer.
cd domains
cd my-cool-project.local
init
0
yes

3. Устанавливаем зависимости.

composer install

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

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

Указываем имя БД, пользователя и пароль в конфиге.
common/config/main-local.php
'dsn' => 'mysql:host=localhost;dbname=my_cool_project_dbname',

6. Запускаем миграции, которые создают необходимые таблицы.

yii migrate

вторник, 4 октября 2016 г.

Настройка IDE и окружения для разработки на Yii2

Вы решили делать сайты на Yii2, и используете:

Windows 10, IDE Netbeans, локальный сервер OpenServer.

У вас уже всё установлено? Хорошо!

Несколько дополнительных настроек сделает вашу работу легче и приятнее.

1. Включаем в OpenServer расширение PHP, необходимое для работы Yii2.
В файле php.ini раскомментируем строку
extension=php_intl.dll

Без этого расширения, вместо русских дат будут отображаться английские.

2. Настраиваем LESS.
OpenServer. http://nex-otaku-ru.blogspot.ru/2016/05/less-yii2-openserver.html
Netbeans. http://nex-otaku-ru.blogspot.ru/2016/08/less-netbeans.html

3. Настраиваем форматирование PSR в Netbeans.
https://github.com/bobsta63/netbeans-psr-formatting

4. Включаем строгое отображение ошибок на машине разработки.
В php.ini (трей OpenServer -> Дополнительно -> Конфигурация -> PHP x.x)
error_reporting = E_ALL

5. Настраиваем xDebug.
Включаем xDebug, настраиваем Netbeans. http://nex-otaku-ru.blogspot.ru/2016/09/xdebug-openserver-netbeans.html
Отключаем xDebug для Composer. http://nex-otaku-ru.blogspot.ru/2016/09/xdebug-composer-openserver.html

6. Настраиваем вывод UTF8 в консоли, для консольных команд Yii.
Запускаем консоль, правой кнопкой нажимаем на заголовок окна, выбираем Settings -> Startup -> Environment.
Дописываем строку
chcp 65001

Также можно настроить автоматический вход в папку "domains".
Прописываем в настройках
Startup -> Tasks -> Shells::cmd
В окошке "Commands", находим строку 
cmd.exe /k "%ConEmuBaseDir%\CmdInit.cmd"
дописываем в конец строки, указав полный путь к папке Опенсервера
-new_console:d:Z:\OpenServer\domains

Теперь сохраняем: "Save Settings".

Готово!