Продовжуємо пиляти свій фреймворк для стражденних і просто цікавих. Фреймворк виходить цікавим, і чим далі в ліс, тим більше він мені подобається.

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 — дивимося і намагаємося 😉