FuelPHP v1.2
Продолжаем следить за развитием этого замечательного фреймворка. И пусть главная страница проекта не вводит вас в заблуждение. FuelPHP v1.2 уже вышел!
Рефакторинг
Большая часть изменений – рефакторинг и исправление ошибок.
Для начала были выпилены все методы и классы, которые в v1.1 были помечены как «устаревшие». Список включает в себя более 50 наименований (ссылка на полный changelog в конце поста).
В свою очередь, некоторые методы были помечены как «устаревшие» и будут удалены в версии 1.3. Почти все это изменения — косметические, например:
Fuel::module_exists()
заменен на: Module::exists()
Среди них только одно значимое изменение: отказ от текущего класса для пагинации. В версии 1.3 Pagination
будет заменен на новый класс Paginate
. Как оказалось, старый класс плохо приспособлен для кастомизации и написан пьяными индусами в слепую. Новый класс будет более гибким, красивым и кошерным.
Новые фишки
— Добавлен новый тип Контроллеров – Controller_Hybrid
, который совмещает в себе функционал Controller_Template
и Controller_Rest
. Описание функционала всех типов контроллеров в FuelPHP тянет на отдельную статью. Если попытаться коротко изложить:
Controller_Template
— позволяет наладить работу с типичным выводом (header, footer, content, menu). Получается мини-шаблонизатор. Не нужно подключать-рендрить множество отдельных View
. В классе-шаблоне задается структура страницы, и все унаследованные контроллеры могут заменять подшаблоны. В большинстве случаев работа с таким контроллером сводится к заполнению свойства content
:
public function action_index() { $data = array(); $this->template->content = View::forge('test/index', $data); } |
Controller_Rest
— позволяет реализовать REST принципы. Например:
class Controller_Test extends Controller_Rest { public function get_list() { $this->response(array( 'foo' => Input::get('foo'), 'baz' => array( 1, 50, 219 ), 'empty' => null )); } } |
При запросе http://localhost/test/list.json?foo=bar
на выходе мы получим ответ в формате json
:
{ "foo":"bar", "baz":[1,50,219], "empty":null } |
До версии 1.2 приходилось писать разные контроллеры. К примеру если у нас был обычный контроллер для управлением списком пользователей, то для реализации REST
приходилось создавать новый контроллер с новым именем. Controller_Hybrid
решает эту проблему.
— Работа с кукисами (класс Cookie
) стала еще удобней. Теперь можно задавать значение по умолчанию так, как это сделано для класса Input
:
$theme = Cookie::get('theme', 'blue'); //Если кукисов с ключом theme нет, то будет возвращено 'blue' |
— Языковые файлы можно хранить в формате php
, ini
, yaml
и json
.
— Профайлер выводится после основного контента. Ранее создавался плавающий div, прикрепленный к низу экрана, что создавало проблемы с версткой в некоторых браузерах.
Работа с базой данных
– Добавлена поддержка limit()
и order_by()
в DB::Update
.
– DButil::create_database()
поддерживает синтаксис ‘IF NOT EXIST
‘ (создает таблицу, только если таковой нет).
– Добавлена работа с внешними ключами. DButil::add_foreign_key()
и DButil::drop_foreign_key()
.
– В Model_Crud
добавлена поддержка полей created_at
и updated_at
, аналогичных тем, что используются в ORM\Model
(позволяют автоматически обновлять эти значения при создании/обновлении записи)
– По умолчанию отключена валидация при сохранении в Model_Crud
. Но можно запустить её отдельно, вызвав метод ::validates
.
– Что-то намудрили с миграциями (до конца не понял, надо попробовать). Указано, что класс Migrate
отслеживает индивидуальные миграции, и можно не ставить номер миграции.
– Добавлено задание (Task
) для создания/удаления таблицы в БД под сессию. Напомню, что задачи выполняются с консоли:
# create the sessions table $ php oil r session:create # remove the sessions table $ php oil r session:remove # clear (truncate) the sessions table $ php oil r session:clear |
Auth
– добавлена возможность валидации данных (validate_user
) без установления сессии.
– SimpleUserUpdateException
возвращает номер ошибки, добавляя возможность точно отследить причину возникновения ошибки.
Oil
– Восстановлена работа команды oil package
для установки модулей из git-репозитория.
– Генератор (scaffolding) поддерживает оба типа моделей: Model_Crud
и Orm\Model.
– Генератор (scaffolding) поддерживает добавление полей created-at
и updated-at
.
— Генератор (scaffolding) поддерживает пропуск создания файла-миграции при использовании ключа -no-migration
.
Множество других изменений в разных местах фреймворка, с полным перечнем которых вы можете ознакомиться в репозитории.
PS. Ложечка дёгтя. Полноценный пост «разочарование в FuelPHP» писать не буду. Но есть вещи, которые огорчают. Больше всего огорчает документация, которая по истечении года все еще имеет черные дыры. Иногда отсутствуют вменяемые примеры. Иногда отсутствуют целые разделы. Но я надеюсь, что к своему юбилею они причешут документацию.