Очередной релиз третьей ветки, и очередной список исправлений и дополнений.
- Стартовая страница модуля Userguide теперь может быть установлена в параметре
default_page
конфига. Напомню, по умолчанию используется ‘about.kohana’. - Модульность Ko3 иногда играла злую шутку с пользователями API от Userguide. Просмотр модуля, имеющего реализации для другого неподключенного модуля (например, драйвер ORM или Jelly), заканчивался выбросом исключения. Теперь же этот класс будет сгенерирован налету. Интересное решение, добавлен еще один autoload-класс Kodoc_Missing.
- В предыдущем релизе умудрились поломать работу валидатора, в тексте ошибки не подставлялось название поля.
- При валидации можно отправлять дополнительные данные в callback‘и. Т.е.
$this->callback('username', 'username_exists', array('test' => 1))
при вызове функции$this->username_exists()
передаст в качестве третьего параметра (после собственно объекта Validate и имени проверяемого поля) массивarray('test' => 1)
. - Вызов
Validate::check(TRUE)
в случае пустого массива вернет TRUE. Возможно, это положит конец бесконечным спорам, почему не проходит валидация пустого массива. - В объект Request добавлен метод
url(array $params = NULL, $protocol = NULL)
, который генерирует абсолютный адрес для переданных параметров$params
с учетом текущего роута. Не путайте сuri(array $params = NULL)
, который возвращает относительный адрес. - Аналогично с объектом Route. Теперь можно вызывать
Route::url('default', array('controller' => 'welcome1'))
и получить что-то вроде /welcome1/index. Удобнее, чемURL::site(Route::get('default')->uri(array('controller' => 'welcome1')));
- При работе с модулем Pagination можно указывать текущий номер страницы в явном виде. Напомню, что до этого номер рассчитывался на основании переданных настроек (параметры
$config['current_page']['source']
и$config['current_page']['key']
). Теперь сперва будет проверяться ключ$config['current_page']['page']
, котором и надо передавать свое значение для страницы. - Добавлен новый шаблон для модуля Pagination. Он называется ‘floating‘, и представляет собой сокращенную версию шаблона ‘basic’ — он показывает не все страницы, а только
$count_in
ссылок в обе стороны от текущей страницы, и$count_out
страниц в начале и конце. Эти параметры можно передавать вPagination::factory()
, по умолчанию они равны 5 и 3 соответственно. - Если в объект Pagination передана несуществующая страница, раньше просто отображалась первая. Теперь же есть возможность проверить корректность номера с помощью метода
valid_page($id)
. Если вернется FALSE, можно предложить свое значение (например, направить на последнюю страницу), можно отправить заголовок404 Not Found
. - Исправлены «детские» дыры (XSS) в безопасности сайта kohanaframework.com и модуля Userguide. В том же тикете было указано на открытость служебных данных SVN и GIT (на Хабре пробегали исследования сайтов на подобные уязвимости), однако на момент написания топика ничего не исправили.
- Использование
Form::image()
приводило к неприятному сообщению (Notice) об отсутствующей переменной$index
. Исправлено. - Имя конфига по умолчанию для Database было жестко прописано в коде. Теперь же можно явно указывать дефолтный конфиг, используя статическое свойство
Database::$default
. ORM будет использовать настройки модуля Database. - Исправлена работа с неассоциативными массивами в методе
arr::merge()
. Правда, реализовано только со второй попытки - При создании элемента
SELECT
(методform::dropdown()
) появилась возможность выбрать несколько значений (т.е массив) — это полезно для работы с MULTIPLE SELECT‘ами.
Мне показались забавными комменты в данном тикете. Равно как и комментарий в новом куске кода —
// This is a multi-select, god save us!
Userguide
Validation
Request/Route
Pagination
Прочее
Качаем, благодарим разработчиков.
Уже поставил! Пока полет нормальный….
ЗЫ У тебя сегодня в 10-12 по МСК сайт ваще не грузился….
Ну да, этот релиз один из немногих в третьей ветке, который потом поспешно не пересобирали
PS. Вполне возможно, вот планирую на выходных начать переезд к другому хостеру.
Ура с пагинатором что-то решили, а то при пагинации результата, когда кол-во всех найденных записей и результат для текущей страницы вызывается одни запросом (например поиск в sphinx). Сдвиг для текущей страницы нельзя было вычислить не передав параметры общего кол-ва записей.