четверг, 18 июня 2015 г.

§2.5 Yii2. Мультиязычность (I18N) и миграции базы данных

Решил применить мультиязычность, как описано в статье хабра Yii2 и организация мультиязычности. В этом методе список языков хранится в базе данных, то есть придется для этого делать таблицу. Делать ее будут с помощью миграций базы данных. Если вкратце, то миграция, это php файл, в котором хранится класс, наследуемый от класса фреймворка Migration. В получившемся классе имеются методы для какого либо изменения базы данных и отката этих изменений. Нужны миграции для того, чтобы не терять контроль за состоянием базы данных в процессе работы: можно проследить историю изменений базы и в случае необходимости вернуться к прежнему состоянию.
Создать миграцию оказалось довольно просто. Сначала надо создать папку для хранения миграций: var/www/yii2/basic/migrations. Теперь подключаемся к веб-серверу через SSH переходим в папку var/www/yii2/basic/ и выполняем команду:
php yii migrate/create language
Language - это названия класса миграции, оно может быть любым. В итоге в папке var/www/yii2/basic/migrations создается файл m_дата_время_имя_класса.php в нем и надо создавать команды для изменения базы данных и команды для откатов этих изменений.
Я добавил в него все, как сказано в статье выше. Нашел небольшую неточность:
 
$this->batchInsert('{{%lang}}', ['url', 'local', 'name', 'default', 'date_update', 'date_create' ...
Должно быть не lang, а {{%lang}}.
После этого миграцию можно применить: из консоли команда:

php yii migrate

Выходит такое сообщение, в котором набираем "y"

user@server:/var/www/yii2/basic$ php yii migrate                              
Yii Migration Tool (based on Yii v2.0.4)                                              
                                                                                                               
Creating migration history table "tbl_migration"...Done.                     
Total 1 new migration to be applied:                                                    
        m150618_091819_language                                                         
                                                                                                              
Apply the above migration? (yes|no) [no]:y                                         

Если ошибок при создании таблицы и вставлении данных нет, то получаем:

*** applying m150618_091819_language                                             
    > create table {{%lang}} ... done (time: 0.014s)                                
    > insert into {{%lang}} ... done (time: 0.008s)                                  
*** applied m150618_091819_language (time: 0.031s)                        
                                                                                                                 
                                                                                                                 
Migrated up successfully.                                                                       
user@server:/var/www/yii2/basic$                                                        

Создалась новая таблица с данными. Можно продолжать.. 
PS. Кстати, теперь научились делать миграции!

Комментариев нет:

Отправить комментарий