Є також і інші покращення у функціоналі подій. Більш детальна інформація про конфігурація представлена у розділі
Є також інші покращення у функціоналі подій. Більш детальна інформація представлена у розділі [Події](concept-events.md).
[Події](concept-events.md).
Псевдоніми шляху
Псевдоніми шляху
----------------
----------------
Yii 2.0 розширює спосіб використання псевдонімів шляху як для файлів і каталогів, так і для URL.
Yii 2.0 розширює спосіб використання псевдонімів шляху як для файлів та директорій, так і для URL.
У Yii 2.0 тепер також потрібно, щоб імʼя псевдоніма починалося із символу `@`, для розмежування псевдонімів від
У Yii 2.0 тепер також потрібно, щоб імʼя псевдоніма починалося із символу `@`, для розмежування псевдонімів від
звичайних шляхів файлів/каталогів і URL. Наприклад, псевдонім `@yii` відповідає каталогу встановлення Yii.
звичайних шляхів файлів/директорій і URL. Наприклад, псевдонім `@yii` відповідає директорії встановлення Yii.
Псевдоніми шляху використовуються в багатьох місцях коду Yii. Наприклад, [[yii\caching\FileCache::cachePath]]
Псевдоніми шляху підтримуються в багатьох місцях коду Yii. Наприклад, [[yii\caching\FileCache::cachePath]]
може використовувати як псевдонім шляху, так і звичайний шлях до каталогу.
може мати значення як псевдоніму шляху, так і звичайного шляху до директорії.
Псевдоніми шляху тісно повʼязані з простором імен класів. Рекомендується, що ви визначите псевдонім шляху
Псевдоніми шляху тісно повʼязані з простором імен класів. Рекомендується призначити псевдонім шляху
для кожного базового простору імен, таким чином завантажувач класів Yii може використовуватися без будь-якої
для кожного базового простору імен, таким чином завантажувач класів Yii може використовуватися без будь-якої
додаткової конфігурації. Наприклад, `@yii` відповідає каталогу встановлення Yii, тому клас `yii\webRequest`
додаткової конфігурації. Наприклад, оскільки `@yii` посилається на директорію де встановленно Yii, клас `yii\web\Request`
може бути завантажений. Якщо ви використовуєте сторонні бібліотеки, такі як Zend Framework, ви можете також визначити
може бути завантажений автоматично. Якщо ви використовуєте сторонні бібліотеки, такі як Zend Framework, ви можете також визначити
псевдонім шляху `@Zend`, який відповідає каталогу встановлення фреймворка. Одного разу зробивши це - Yii буде
псевдонім шляху `@Zend`, який відповідає директорії встановлення цього фреймворка. Після чого Yii буде
здатний автоматично завантажувати будь-який клас Zend Framework.
здатний автоматично завантажувати будь-який клас Zend Framework.
Більш детальна інформація про конфігурації представлена у розділі [Псевдонімів](concept-aliases.md).
Більш детальна інформація про псевдоніми шляху представлена у розділі [Псевдоніми](concept-aliases.md).
Представлення
Представлення
-------------
-------------
Однією із основних змін в Yii2 є те, що спеціальна змінна `$this` у представленні більше не відповідає
Однією із основних змін в Yii2 є те, що спеціальна змінна `$this` у представленні більше не відповідає
поточному контролеру або віджету. Замість цього, `$this` тепер відповідає обʼєкту *представлення*, нової можливості,
поточному контролеру або віджету. Замість цього, `$this` тепер відповідає обʼєкту *представлення*, новій можливості,
яка була введена у версії 2.0. Обʼєкт представлення має тип [[yii\web\View]], який являє собою частину *представлення*
яка була введена у версії 2.0. Обʼєкт представлення має тип [[yii\web\View]], який являє собою частину *представлення*
у шаблоні проектування MVC. Якщо ви хочете отримати доступ до контролера або віджету, то використовуйте вираз `$this->context`.
у шаблоні проектування Модель-Представления-Контролер (MVC). Якщо ви хочете отримати доступ до контролера або віджету, то використовуйте вираз `$this->context`.
Для рендеринга часткових представлень тепер використовується метод `$this->render()`, а не `$this->renderPartial()`.
Для формування часткових представлень тепер використовується метод `$this->render()`, а не `$this->renderPartial()`.
Результат виклику методу `render` тепер повинен бути виведений безпосередньо, так як `render` повертає результат
Результат виклику методу `render` тепер повинен бути виведений безпосередньо, так як `render` повертає результат,
рендеринга, а не відображає його одразу. Наприклад,
Замість того, щоб повертати обʼєкти [[yii\db\ActiveRecord|ActiveRecord]], ви можете використовувати метод
Замість того, щоб повертати обʼєкти [[yii\db\ActiveRecord|ActiveRecord]], ви можете використовувати метод
[[yii\db\ActiveQuery::asArray()|asArray()]] при побудові запиту, для вибірки великої кількості записів.
[[yii\db\ActiveQuery::asArray()|asArray()]] при побудові запиту, для вибірки великої кількості записів.
Це змусить повернути результат запиту у якості масива, що може суттєво знизити час, який потрібен ЦПУ і памʼяті
Це змусить повернути результат запиту у якості масиву, що може суттєво знизити витрати процесорного часу і памʼяті
при великій кількості записів. Наприклад:
при великій кількості записів. Наприклад:
```php
```php
$customers = Customer::find()->asArray()->all();
$customers = Customer::find()->asArray()->all();
```
```
Ще одна зміна повʼязана з тим, що ви більше не можете визначати значення по-замовчуванням як властивостей.
Ще одна зміна повʼязана з тим, що ви більше не можете визначати значення атрибутів за замовчуванням з допомогою public властивостей.
Ви повинні встановити їх у методі `init` вашого класу, якщо це потрібно.
Ви можете встановити їх у методі `init` вашого класу запису, якщо це потрібно.
```php
```php
public function init()
public function init()
@ -463,21 +464,21 @@ public function init()
}
}
```
```
Також у версії 1.1 були деякі проблеми із перевизначенням конструктора ActiveRecord. Дані проблеми не присутні
Також у версії 1.1 були деякі проблеми із перевизначенням конструктора ActiveRecord. Дані проблеми відсутні
у версії 2.0. Зверніть увагу, що при додаванні параметрів у конструктор, вам, можливо, знадобиться перевизначити метод
у версії 2.0. Зверніть увагу, що при додаванні параметрів у конструктор, вам, можливо, знадобиться перевизначити метод
[[yii\db\ActiveRecord::instantiate()]]. Перевизначення може не знадобитися, якщо параметри, передані в конструктор
[[yii\db\ActiveRecord::instantiate()]]. Перевизначення може не знадобитися, якщо параметри, передані в конструктор
матимуть значення за умовчанням, наприклад `null`.
матимуть значення за умовчанням, наприклад `null`.
Існує також безліч інших покращень у ActiveRecord. Більш детальна інформація про конфігурацію представлена у розділі
Є також безліч інших змін та покращень у ActiveRecord. Більш детальна інформація про них представлена у розділі
[Active Record](db-active-record.md).
[Active Record](db-active-record.md).
Поведінки Active Record
Поведінки Active Record
-----------------------
-----------------------
У версії 2.0 ми позбулися від класу базової поведінки `CActiveRecordBehavior`. Якщо ви хочете створити поведінку
У версії 2.0 розробники позбулися класу базової поведінки `CActiveRecordBehavior`. Новостворюваний клас поведінки Active Record
Active Record, ви повинні будете розширити класс`yii\base\Behavior`. Якщо класу поведінки необхідно реагувати на
має бути успадкованим безпосередньо від класу`yii\base\Behavior`. Якщо класу поведінки необхідно реагувати на
деякі події власника, ви повинні перевизначити метод `events()`, як показано нижче,
деякі події власника, потрібно перевизначити метод `events()`, як показано нижче,
```php
```php
namespace app\components;
namespace app\components;
@ -508,17 +509,17 @@ User та IdentityInterface
-------------------------
-------------------------
Клас `CWebUser` у версії 1.1 тепер замінений класом [[yii\web\User]], а також більше не існує класу `CUserIdentity`.
Клас `CWebUser` у версії 1.1 тепер замінений класом [[yii\web\User]], а також більше не існує класу `CUserIdentity`.
Замість цього, ви повинні надати реалізацію інтерфейсу [[yii\web\IdentityInterface]], що набагато простіше у використанні.
Замість цього, необхідно реалізувати інтерфейс [[yii\web\IdentityInterface]], що набагато простіше у використанні.
Більш детальна інформація представлена у розділах [Аутентифікація](security-authentication.md),
Більш детальна інформація представлена у розділах [Аутентифікація](security-authentication.md),
[Авторизація](security-authorization.md) та [Шаблон додатка advanced](tutorial-advanced-app.md).
[Авторизація](security-authorization.md) та [Розширений шаблон додатка](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide-uk/README.md).
Управління URL
Керування URL
--------------
-------------
Робота з URL в Yii 2.0 аналогічна тій, що була у версії 1.1. Основна зміна полягає в тому, що тепер підтримуються
Робота з URL в Yii 2.0 аналогічна тій, що була у версії 1.1. Основне покращення полягає в тому, що тепер підтримуються
додаткові параметри. Наприклад, якщо у вас є правило, оголошене наступним чином, то воно співпаде з `post/popular` та
додаткові параметри. Наприклад, якщо у вас є правило, оголошене нижче, то воно співпаде з `post/popular` та
`post/1/popular`. У версії 1.1 вам довелося б використовувати два правила для отримання того ж результату.
`post/1/popular`. У версії 1.1 вам довелося б використовувати два правила для отримання того ж результату.
```php
```php
@ -529,11 +530,11 @@ User та IdentityInterface
]
]
```
```
Більш детальна інформація представлена у розділі [Розбір та генерація URL](runtime-routing.md).
Більш детальна інформація представлена у розділі [Маршрутизація та створення URL](runtime-routing.md).
Використання Yii 1.1 разом із 2.x
Використання Yii 1.1 разом із 2.x
---------------------------------
---------------------------------
Інформація про використання коду для Yii 1.1 разом із Yii 2.0 представлена у розділі
Інформація про використання коду для Yii 1.1 разом із Yii 2.0 представлена у розділі
[Одночасне використання Yii 1.1 та 2.0](tutorial-yii-integration.md).
[Робота із стороннім кодом](tutorial-yii-integration.md).
- Створення мапи класів `classes.php` у кореневій директорії фреймворку.
- Створення мапи класів `classes.php` у кореневій директорії фреймворку.
Виконати `./build/build classmap` для її створення.
Виконати `./build/build classmap` для її створення.
- Створення анотацій `@property` у файлах класів, що описують властивості представлені функціями для отримання (getters) та призначення (setters) властивостей.
- Створення анотацій `@property` у файлах класів, що описують властивості представлені геттерами та сеттерами.
Виконати `./build/build php-doc/property` для їх оновлення.
Виконати `./build/build php-doc/property` для їх оновлення.
- Виправлення стилю кодування та інших невеличких проблем у коментарях phpdoc.
- Виправлення стилю кодування та інших невеличких проблем у коментарях phpdoc.
Виконати `./build/build php-doc/fix` для виправлення.
Виконати `./build/build php-doc/fix` для виправлення.
Перед тим як створювати коміт, необхідно перевіряти зміни, оскільки команда не є досконалою й можливі не бажані зміни.
Перед тим як створювати комміт, необхідно перевіряти зміни, оскільки команда не є досконалою й можливі не бажані зміни.
Можна використовувати `git add -p` для перегляду змін.
Можна використовувати `git add -p` для перегляду змін.
Наступні кроки не обов'язкові, якщо ви хочете працювати лише над перекладом або документацією.
- виконайте `composer update` для встановлення залежностей (припускається, що ви маєте [глобально встановлений composer](https://getcomposer.org/doc/00-intro.md#globally)).
- виконайте `php build/build dev/app basic` для клонування базового додатку та встановлення його залежностей.
Ця команда встановить сторонні пакунки composer як завжди, а також створить посилання з репозиторію yii2
на поточний репозиторій. Таким чином ви будете мати один екземпляр встановленого коду.
Якщо необхідно, зробіть те ж саме для розширеного додатку: `php build/build dev/app advanced`.
Ця команда може використовуватись для оновлення залежностей, вона викликає `composer update` в процесі виконання.
**Тепер ви маєте робочий майданчик для експериментів з Yii 2.**
Наступні кроки не обов’язкові.
### Модульні тести
Ви можете виконати модульні тести, запустивши `phpunit` у кореневій директорії репозиторію. Якщо у вас phpunit не встановлений глобально,
ви можете запускати `php vendor/bin/phpunit`.
Деякі тести потребують додатково встановлення та налаштування баз даних. Ви можете створити `tests/data/config.local.php` для перевизначення
налаштувань сконфігурованих у `tests/data/config.php`.
Можливо обмежити тести групою тестів, що покривають область над якою ви працюєте, наприклад, щоб запустити тести для валідаторів
та redis, виконайте `phpunit --group=validators,redis`. Для отримання списку доступних груп виконайте `phpunit --list-groups`.
### Розширення
Для роботи з розширеннями необхідно клонувати відповідні репозиторії. Наступна команда зробить це для вас:
```
php build/build dev/ext <extension-name>
```
де `<extension-name>` є назвою розширення, наприклад `redis`.
Якщо бажаєте протестувати розширення в одному із шаблонів додатку, просто додайте його до `composer.json` додатку, як ви будете
робити зазвичай. Наприклад, додайте `"yiisoft/yii2-redis": "*"` до секції `require` базового додатку.
Команда `php build/build dev/app basic` встановить розширення та його залежності й створить
символьне посилання на `extensions/redis`, тому ви можете працювати безпосередньо в директорії репозиторію yii2,
а не у специфічній для composer директорії vendor.
Робота з помилками та функціоналом
----------------------------------
Отримавши середовище розробки, як було описано вище, ви можете розпочати роботу над функціоналом або виправленням помилок.
### 1. Переконайтесь, що створено питання стосовно речі, над якою ви працюєте, якщо це потребує багатьох зусиль для виконання
Усі нові можливості та виправлення помилок повинні мати пов’язане запитання, яке забезпечує єдину точку посилання для обговорення
та документації. Витратьте декілька хвилин на перегляд списку створених питань, щоб знайти ті, що стосуються внеску, який ви
збираєтесь зробити. Якщо знайдете таке у списку запитань, потім, будь ласка, залиште коментар із зазначенням, що ви
збираєтесь працювати над цим. Якщо не знайшли створеного питання, що стосується того, над чим ви збираєтесь працювати, будь ласка
[створіть нове запитання](report-an-issue.md) або відправте "pull request" безпосередньо, якщо це не складне виправлення. Це дозволить команді
розробників розглянути вашу пропозицію та надавати відповідний зворотний зв’язок протягом шляху.
> Для невеликих змін, проблем документації або простих виправлень нема потреби створювати питання, достатньо відправити "pull request" у цих випадках.
### 2. Отримайте останній код з головної гілки Yii
```
git fetch upstream
```
З цього необхідно розпочинати кожний новий внесок, щоб бути впевненим, що ви працюєте з найновішим кодом.
### 3. Створіть нову гілку для вашого внеску на базі поточної основної гілки Yii
> Це дуже важливо, тому що ви не зможете відправляти більше, ніж один "pull request" від вашого імені, у разі
використання основної (master) гілки.
Кожні окремі виправлення помилок або зміни повинні мати власні гілки. Назви гілок повинні бути наочними та починатись з
номеру питання, яке пов’язане із вашим кодом. Якщо ви працюєте не над специфічним питанням, просто пропустіть номер.
Наприклад:
```
git checkout upstream/master
git checkout -b 999-name-of-your-branch-goes-here
```
### 4. Робіть вашу магію, пишіть ваш код
Переконайтесь, що він працює :)
Модульні тести завжди вітаються. Протестований та добре покритий код надзвичайно полегшує перевірку вашого внеску.
Провальні модульні тести як опис проблеми також приймаються.
### 5. Оновіть журнал змін (CHANGELOG)
Додайте до файлу CHANGELOG зроблені вами зміни у верхній частині документу під заголовком
"Work in progress", запис у журналі змін повинен виглядати подібно до наведеного прикладу:
```
Bug #999: a description of the bug fix (Your Name)
Enh #999: a description of the enhancement (Your Name)
```
`#999` - це номер питання, на яке посилається виправлення помилки (`Bug`) або покращення (`Enh`).
Записи журналу змін повинні бути згруповані за типом (`Bug`, `Enh`) та сортовані за номером питання.
Для дуже малих виправлень, наприклад, друкарських помилок та змін у документації, нема потреби оновлювати CHANGELOG.
### 6. Створіть комміт ваших змін
Додайте файли/зміни, призначені для комміту, в [буферну зону](http://gitref.org/basic/#add) за допомогою команди:
```
git add path/to/my/file.php
```
Використовуйте опцію `-p` для відбору змін, які ви бажаєте додати до вашого комміту.
Створіть комміт з описовим повідомленням. Переконайтесь, що вказали номер питання як `#XXX`, щоб GitHub
автоматично пов’язав ваш комміт із питанням:
```
git commit -m "A brief description of this change which fixes #999 goes here"
```
### 7. Додайте останній код Yii з upstream до вашої гілки
```
git pull upstream master
```
Це гарантує, що ви матимете останній код у вашій гілці перед тим, як відправити "pull request". Якщо є будь-які конфлікти поєднання,
треба виправити їх одразу та знову створити комміт. Це забезпечить команду розробників Yii можливістю легко приєднати ваші зміни
одним натисканням кнопки.
### 8. Вирішивши будь-які конфлікти, відправте ваш код до GitHub
Будь ласка, дотримуйтесь рекомендацій, зазначених нижче, при створенні питання, щоб прискорити його вирішення:
* Подавайте інформацію, включаючи: версію PHP та Yii, тип операційної системи та веб-сервера, тип та версію браузера.
* Додавайте **повний** вивід про помилку, якщо є. Скріншот, що пояснює проблему, дуже вітається.
* Опишіть кроки, які призводять до помилки. Було б ще краще, надати код для відтворення проблеми.
* Якщо можливо створіть модульний тест, навіть провальний, та [надішліть його як "pull request"](git-workflow.md).
Якщо проблема повʼязана з одним із офіційних розширень, будь ласка, повідомляйте про неї у репозиторії цього розширення.
Якщо ви не впевнені, [повідомляйте у головному репозиторії](https://github.com/yiisoft/yii2/issues/new) (<https://github.com/yiisoft/yii2/issues>).
**Не повідомляйте про проблему, якщо:**
* Ви хочете спитати як використовувати ту чи іншу можливість Yii. Для цього користуйтесь [форумом](http://www.yiiframework.com/forum/index.php/forum/42-general-discussions-for-yii-20/) або [чатом](http://www.yiiframework.com/chat/).
* Проблема стосується безпеки. Будь ласка, [звертайтесь безпосередньо до розробників](http://www.yiiframework.com/security/), щодо проблем з безпекою.
**Уникайте дублювання питань**
Перед тим, як повідомити про проблему, будь ласка, здійсніть пошук серед [створених запитань](https://github.com/yiisoft/yii2/issues),
можливо про проблему вже повідомили або проблема вже вирішена. Також переконайтесь, що маєте останню версію Yii та у разі оновлення перевірте чи проблема при цьому присутня.
У разі необхідності встановіть [Composer](https://getcomposer.org/) в кореневій директорії вашого локального репозиторію.
### Список документів
Перелік документів, що потребують перекладу, можна знайти за нижченаведеними посиланнями:
- [список документів для guide-uk](https://ethercalc.org/yii2.docs.guide-uk);
- [список документів для internals-uk](https://ethercalc.org/yii2.docs.internals-uk).
Перед тим, як розпочати переклад, переконайтесь, що їм ніхто не займається, та запишіть себе у списку документів.
В залежності від прогресу оберіть відповідний статус перекладу:
- В роботі — переклад готується перекладачем до відправлення "pull request";
- Ревізія — відправлений переклад перевіряється ревізором;
- Перекладено — переклад прийнято до головної (master) гілки проекту.
За додатковою інформацією можете звертатись до учасників української [команди перекладачів](../internals/translation-teams.md).
### Переклад зображень
Зображення до документації знаходяться у вкладеній директорії `images`. Усі вони створенні програмою [yED](http://www.yworks.com/en/products/yfiles/yed/).
При необхідності перекладу оригінальний файл копіюється в директорію `images` перекладу, перекладається та зберігається у форматі png.
Перелік зображень, що потребують перекладу, можна знайти за нижченаведеним посиланням:
- [список зображень для guide-uk](https://ethercalc.org/yii2.docs.guide-uk.images).
* 100%-ва зворотна сумісність, що гарантує оновлення без проблем. Виключенням можуть бути лише проблеми безпеки, які потребують порушення зворотної сумісності
* 100%-ва зворотна сумісність, що гарантує оновлення без проблем. Виключенням можуть бути лише проблеми безпеки, які потребують порушення зворотної сумісності
* Цикл релізу близько 1-2 місяців
* Цикл релізу близько 1-2 місяців
* Не має необхідності у пре-релізах (альфа, бета, реліз-кандидат)
* Не має необхідності у пре-релізах (альфа, бета, реліз-кандидат)
* Регулярно об'єднуються з головною (майстер) гілкою (щонайменш раз у тиждень вручну)
* Регулярно обʼєднуються з головною (master) гілкою (щонайменш раз у тиждень вручну)
## Молодші (майнор) релізи `2.X.0`
## Молодші (мінорні) релізи `2.X.0`
Зворотно несумісні релізи, що містять великі доповнення та зміни, які можуть порушувати зворотну сумісність. Оновлення з ранніх версій
Зворотно несумісні релізи, що містять великі доповнення та зміни, які можуть порушувати зворотну сумісність. Оновлення з ранніх версій
може бути не простим, але у наявності повна інструкція по оновленню або навіть скрипт.
може бути не простим, але у наявності повна інструкція по оновленню або навіть скрипт.
@ -40,10 +40,10 @@
* Потребують маркетингових зусиль та публікування у головних новинах
* Потребують маркетингових зусиль та публікування у головних новинах
## Головні (мажор) релізи `X.0.0`
## Основні (мажорні) релізи `X.0.0`
Це наче 2.0 після 1.0. Такий перехід, вірогідніше, буде не частіше ніж кожні 3-5 років, у зв'язку з просуванням сторонніх технологій
Це наче 2.0 після 1.0. Такий перехід, вірогідніше, буде не частіше ніж кожні 3-5 років, у звʼязку з просуванням сторонніх технологій
(наприклад, оновлення PHP з 5.0 до 5.4).
(наприклад, оновлення PHP з 5.0 до 5.4).
> Примітка: Офіційні розширення використовують таку ж саму політику призначення версій але можуть публікуватись незалежно від
> Примітка: Офіційні розширення використовують таку ж саму політику призначення версій, але можуть публікуватись незалежно від
фреймворку, тобто номера версій фреймворку та розширення не повинні обов'язково збігатсь.
фреймворку, тобто номера версій фреймворку та розширення не повинні обовʼязково збігатися.