Yii2 и организация мультиязычности
Долгожданный выход Yii 2.0 Beta дал стимул многим разработчикам, использующих Yii, к переходу на вторую версию фреймворка. Разработчики фреймворка указали, что постараются не трогать обратную совместимость и в основном будут сосредоточены над исправлением ошибок и заканчивать документацию. Это дает еще больший импульс к использованию Yii2 в реальных проектах.
Мы решили не отставать от новшеств и выбрали именно вторую версию замечательного фреймворка Yii. При разработке проекта возникла необходимость в организации мультиязычности на сайте.
Постановка задачи
1. Количество языков неограниченно.
2. URL сайта представлены как ЧПУ и SEO оптимизированы. Ссылки вида:
example.com/en/mypage
example.com/ru/mypage
example.com/de/mypage
3. Минимальные изменения в работе с фреймворком. Ресурс по ссылке example.com/mypage должен отдаваться на языке, установленным по умолчанию. Правила роутинга не должны изменяться в зависимости от количества языков.
Использование Yii в сторонних приложениях
Иногда возникает потребность работать с данными из приложения Yii в стороннем скрипте, например, вывести количество записей в таблице или произвести иные действия. Удобней всего делать это, используя классы Yii.
Что бы использовать эту возможность, нам потребуется просто не запускать Yii приложение, а только подключить для дальнейшего использования. Создадим файл yii.php, в который всавим следующий код:
Yii доступен через Composer
Популярный PHP фреймворк Yii доступен, как пакет Composer. Включен в репозиторий packagist.org.
Примеры использования CDbCriteria в Yii
CDbCriteria - это набор правил, критериев, по которым строится запрос, обычно SQL. Например, сортировка - order by, смещение offset, ограничение - limit.
Может использоваться в методах ActiveRecord, например в: CActiveRecord::find и CActiveRecord::findAll.
Загрузка файлов в Yii используя модель
Часто, особенно при написании бэкендов, стоит задача загрузки файла к определенной сущности. Это может быть изображение к статье, файл прайса к товару, установочный файл приложения и т.д. Данные при заполнении будут приходить с формы. Поэтому лучший вариант это использование модели для валидации входящих данных.
Модель
Файла для сохранения будем хранить в переменной $image класса модели. Так же, в правилах валидации объявляем правило для проверки файла, так как он приходи из формы.
Хранение паролей в PHP с использованием crypt()
Хранение паролей в web-приложении
Существует много примеров и материалов, в которых показано как хранить пароли в базе данных.
Часто описанные методы некачественные и подвержены взлому. В сети есть много учебных примеров, которые показывают, как сделать это неверно.
На практике, системы, которые используют доступ к данным по паролю ни коим образом не должны полагаться на то, что пользователь создат "сложный" пароль, например, при регистрации. "Сложный" пароль для злоумышленника, а не для пользователя. Также ошибочно считать свою систему на столько защищенной и безопасной, что злоумышленник не сможет заполучить дамп таблици или файл с паролями или их хэшами. С этого следует, что нужно чтобы даже при получении такого дампа, злоумышленник ничего не мог с ним сделать, то есть информация была бесполезна для него.