Проектування фільтрів

Фільтри – це об'єкти, які можуть запускатися як перед так і після дій контролера. Наприклад, фільтр управління доступом може запускатися перед діями щоб упевнитися, що запит їх користувачеві дозволено доступ.

За замовчуванням фільтри будуть оголошені в класі контролера, та застосовуватимуться до всіх його дій. Розробник також зможе явно вказати і конкретні дії задавши властивість only.

При створенні нового фільтра дії, необхідно успадковуватися від класу ActionFilter і перевизначити методи beforeAction() та afterAction(). Перший з них буде викликаний перед виконанням дії, а другий після. Якщо від методу beforeAction() повернеться значення false, то фільтри не будуть застосовані і дію виконано не буде.

Фільтр AccessControl забезпечуватиме просте управління доступом, що базується на наборі правил rules. Зокрема, перед тим як дія почне виконання, фільтр AccessControl перевірятиме список зазначених правил, поки не знайде відповідне поточному контексту змінних (таких як IP адреса користувача, статус аутентифікації і так далі). Знайдене правило вказуватиме, дозволити або заборонити виконання запитаного дії. Якщо жодне з правил не буде підходить, то доступ буде заборонений.

Проектування методів авторизації

Для створення даних авторизації потрібно буде виконати наступні завдання:

– визначити ролі і дозволи;

– встановити відносини між ролями та правами доступу;

– визначити правила;

– пов’язати правила з ролями та дозволами;

– призначити ролі користувачам.

Наприклад, автор може створювати пост, адміністратор може оновлювати пост і робити все, що може робити автор. На рисунку 2.5 наведено приклад використання ролей.

Рис. 2.5 – Приклад використання ролей в WEB системі

Роль за умовчанням – це роль, яка неявно присвоюється всім користувачам (авторизовані дані не містять інформації).

Віджети

Віджети є багаторазовими будівельними блоками, які використовуватимуться в представленнях для створення складних і налаштованих елементів призначеного для користувача інтерфейсу в рамках об'єктно-орієнтованого підходу. Наприклад, віджет вибору дати (date picker) дозволяє генерувати інтерактивний інтерфейс для вибору дат, надаючи користувачам WEB системи зручний спосіб для введення даних такого типу. Все, що потрібно буде зробити для підключення віджета – це додати наступний код в уявлення: <?= DatePicker::widget(['name' => 'date'])?>. При цьому використовуватимуться стилі Bootstrap, які включені в фреймворк, тому потрібно буде підключити файл для виведення віджета в представлення за допомогою коду: <?php use fw\bootstrap\DatePicker;?>. За виведення віджета в представлення відповідатиме метод widget(), який належить класу Widget. Метод прийматиме масив налаштувань для ініціалізації віджета і повертатиме результат його відображення.

Ресурси фреймворку

Ресурс – це файл який може бути заданий в WEB сторінці. Це може бути CSS файл, JavaScript файл, зображення або відео файл і т.д. Ресурси розташовуватимуться в WEB доступних директоріях і обслуговуватимуться безпосередньо WEB серверами. Комплект ресурсів – це простий набір ресурсів розташованих в директорії. Комплект ресурсів визначатиметься як PHP клас AssetBundle. При завданні комплекту ресурсів зазвичай вказується де ресурси знаходяться, які CSS і JavaScript файли містить комплект.

Наприклад:

– class AppAsset extends AssetBundle – означає створення нового комплекту ресурсів AppAsset, який унаслідується від батьківського класу AssetBundle;

– basePath – задає Web доступну директорію, яка містить файли ресурсів поточного комплекту. Коли розробник буде встановлювати властивість sourcePath, то менеджер ресурсів опублікує ресурси поточного комплекту в Web доступну директорію і оновить запис відповідної властивості. Вказується в класі, як публічний запис: public $basePath = 'директорія ресурсу';

– baseUrl – задає URL відповідний директорії basePath. Вказується в класі, як публічний запис: public $baseUrl = '@web';

– js – масив, який перераховує JavaScript файли, що містяться в даному комплекті, вказується наступним чином: public $js = [/*перелік файлів*/];

– css – масив, перераховує CSS файли, що містяться в даному комплекті. Формат цього масиву такий, як і у js. Наприклад: public $css = ['css/site.css'];

– depends – масив, який перераховує імена комплектів ресурсів, від яких залежить даний комплект. Наприклад: public $depends = ['bootstrap\BootstrapAsset'].

Коли розробник буде включати кілька CSS або JavaScript файлів в WEB сторінку, вони повинні слідувати в певному порядку, щоб уникнути перевизначення в процесі роботи WEB системи. Наприклад, якщо розробник буде використовувати віджет jQuery UI на WEB сторінці, то він повинен переконатися, що jQuery JavaScript файл був включений до jQuery UI JavaScript файлу. Такий порядок можна назвати порядком залежністю між ресурсами, який вказується в публічному масиві $depends[] класу AssetBoundle. Залежності ресурсів є також залежними. Це означає, що якщо комплект А залежить від В, який залежить від С, то А теж залежить від С.

Для використання комплекту ресурсів, розробнику потрібно буде зареєструвати його в поданні викликавши метод AssetBundle::register(). Наприклад, комплект ресурсів в поданні може бути зареєстрований в такий спосіб: AppAsset::register($this). Де $this – об'єкт уявлення. При цьому потрібно підключити до сценарію виконання наступний код: use app\assets\AppAsset.

Оскільки комплект ресурсів це звичайний PHP клас, він може містити додаткову логіку, пов'язану з ним, і може коригувати свої внутрішні параметри динамічно (наприклад, за допомогою ajax).

Ключі assetMap – це імена ресурсів, що розробнику може потрібно буде виправити, а значення – це необхідні шляхи для ресурсів. Коли буде реєструватись комплект ресурсів в поданні, кожен відповідний файл ресурсу в css або js масивах буде розглянуто відповідно до цієї прив'язки. І, якщо який-небудь з ключів буде знайдений, як остання частина на шляху до файлу ресурсу (шлях на який починається з fw\web\AssetBundle::$sourcePath наприклад), то відповідне значення замінить ресурс і буде зареєстровано в уявленні. Наприклад, шлях до файлу ресурсу my/path/to/jquery.js відповідає ключу jquery.js. Ресурси будуть задані тільки з використанням відносного шляху і можуть використовуватися в прив'язці ресурсів.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: