FuelPHP v1.2

21st Май 2012 | Категории: FuelPHP, PHP | Метки:

Продолжаем следить за развитием этого замечательного фреймворка. И пусть главная страница проекта не вводит вас в заблуждение. 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» писать не буду. Но есть вещи, которые огорчают. Больше всего огорчает документация, которая по истечении года все еще имеет черные дыры. Иногда отсутствуют вменяемые примеры. Иногда отсутствуют целые разделы. Но я надеюсь, что к своему юбилею они причешут документацию.

Subscribe without commenting


Пока комментариев нет.