Продовжуємо пиляти свій фреймворк для стражденних і просто цікавих. Фреймворк виходить цікавим, і чим далі в ліс, тим більше він мені подобається.
Skype-чат розробників Bluz фреймворку
Півроку назад я вже викладав огляд фреймворку, так що, можливо, буду повторюватися
Навіщо?
Хочеться новенького, свіженького і цікавого, та й мізки завжди приємно розім’яти. Чому не «…», так він же:
- Застарілий
- Повільний
- Банальний
- Ніякої
- Ізгой
- … і просто набрид
Застарілий, значить виходить нова версія фреймворку, а у вимогах вказана стара версія PHP, або ось дивишся в код, а там половина коду висить для забезпечення зворотної сумісності. Повільний, ну тут зрозуміло. З визначенням банальної трохи складніше, скажімо так — це не фреймворк, а швидше вдала добірка класів, яка у кожного розробника є. Ніякої — це невдала добірка класів для проекту. Ізгой-це той, який розробляється з огляду на …
Ще подумаю і напишу сюди кілька критеріїв
Що пропонуємо?
- Usability коду, тобто в першу чергу я хочу щоб ви насолоджувалися розробкою проекту, а не тихо лаялися вголос.
- Якщо ж дуже хочеться лаятися, то будь ласка, можете російською, ми зрозуміємо і пробачимо
- Додаємо код нові плюшки мови, і намагаємося використовувати їх на повну котушку, таким чином з нами не заржавеете
- Налаштовуємо процес розробки «правильно» — VCS, unittests, CI, і вчимо цього інших
- Поки посилаємо нафіг зворотну сумісність зі старими версіями, не ну ті те щоб зовсім, але мені здається краще написати талмуд з міграції коду для розробників, ніж виступати в ролі хом’яка, які запасається кодом запас.
Що ще?
А ще є ідеологія:
- фреймворк повинен бути прозорий для розробника, так щоб все, що відбувається міг пояснити навіть початківець розробник
- фреймворк повинен бути передбачуваний, якщо у вас падає на сайті, ви повинні розуміти звідки ноги ростуть
- фреймворк повинен бути зручний в роботі, щоб у вас не виникало бажання переписати код на чистому PHP
Давай по суті, не томи
Так от почну з контролерів, представляють вони собою анонімну функцію, яку можна замкнути об’єкт View, якщо знадобиться:
user = Users\Table::findRow($id);
};
Більш докладно описано в wiki — framework/wiki/Controller
Повернемося до View. Можливо ви вже знаєте, що я прихильник нативних шаблонизаторов, тому і в Bluz використовується такий же:
return
/**
* @var Bluz\View $view
* @return closure
*/
function() use ($view) {
$view->title = “Hello world”
};
Власне код шаблону:
title?>
Всякі дрібні фішки по роботі з шаблонизатором описані у відповідному розділі framework/wiki/View
Ну залишилося ще про моделі замовити слово, у фреймворку для цього є класи Table Row — це якась подоба active record:
created = gmdate(‘Y-m-d H:i:s’);
}
public function beforeUpdate()
{
$this->updated = gmdate(‘Y-m-d H:i:s’);
}
}
$userRow = new Users\Row();
$userRow -> login = ‘username’;
$userRow -> save();
$userRow = Users\Table::findRow(42);
// or
$userRow = Users\Table::findRowWhere([‘login’=>’username’]);
Маршрутизація
Організація маршрутизації проста до неподобства, вказуємо безпосередньо в коментарях контролера правила за якими до нас будуть приходити в гості:
/**
* @route /users/{$id}
* @param integer $id
*/
При використання не вимагають явного вказівки імені (привіт ZF):
url(‘users’, ‘login’);
$this->url(‘users’, ‘profile’, array(‘id’ => $id));
$this->url(‘pages’, ‘show’, array(‘name’ => $name));
?>
Звичайно, подібна реалізація не без недоліків, але таки цілком юзабельно, і під стати фремворку.
Роздача прав доступу
За даний функціонал відповідає пакет Acl, і як ви вже здогадалися — привілей для доступу до контролеру так само вказується в анотації:
Це ще не все
Є ще кешування контролерів, і його налаштування теж вказуємо в коментарях; є приведення типів вхідних параметрів функції (що ловляться із запитів); та ще є обмеження по тому як можна запросити метод (POST, CLI, etc):
Про скелеті
В доважок до фреймворку йде напівфабрикат CMS — skeleton, який представляє з себе готові модулі та обв’язку з Twitter Bootstr’a і готових javascript’ов (з АМД на require.js). З готового і зручного:
Click Me!
Click Me!
Click Me!
Click Me!
В скелеті так само є один корисний модуль — test — це добірка «рецептів» в які корисно заглядати.
І в догонку
Є ще пачка пакетів, мабуть варто привести їх список:
- Cache — дуже проста обгортка над memcached
- EventManager — події та їх обробники
- Registry — тут без коментарів
- Request — об’єкт запиту, сам по собі використовується рідко
- Session — лише обгортка над адаптерами сесії
- І ряд інших — все wiki
Висновки
Bluz фреймворк призначений для невеликих проектів середньої складності, для яких використання великовагових побратимів не раціонально, а микрофреймворки не надають всього необхідного (наприклад MVC вже дуже хочеться). Bluz не буде стає на шлях розвитку ZF/Symfony/etc, адже нам не потрібен ще один монстр?..
Ну і для розширення кругозору, поглиблення знань про PHP 5.4, так і просто заради цікавості — github.com/bluzphp — дивимося і намагаємося 😉