Yii2 дайджест новостей разработки #6 Март'14
04 марта 2014 г., 11:15:26В любом случае разработка Yii2 продвигается к Бета релизу, за поледний месяц "прилетело" всего пара "ломающих" критических изменений ;)
Ах да - это первая русская версия дайджета, стоит отметить! Английская версия (для любителей) по ссылке вверху.
- Yii2 репозиторий добавлен в Scrutinizer-CI. Чувствуете в себе силы улучшить "запах кода"? Участвуйте, рассматривайте репорты и предлагайте улучшения.
- Первая реализация REST api от Qiang. Смотри реализацию, читай доки, участвуй в дискуссии! Ещё не в Мастер-ветке, но уже реализовано много возможностей - быстрое прототипирование, ройтинг по HTTP verbs, авторизация, HATEOAS и т.п.
- Новый вид документации фрэймворка. Совмещён с Class References. Теперь документацию читать намного удобнее
- Требует помощь для улучшения генератора документации
- Требуется помощь для исправления проблем совместимости Yii2 с HHVM
- Поддержка пакетных запросов в БД (Query results in Batches). Полезно для работы с большими выборками. Документация
- Поддержка вложенных транзакций (Nested Transactions)
- Большое изменение в организации кастомных скоупов для ActiveRelation. Теперь требуется создавать отдельный класс Query для каждой AR модели и прописывать скоупы в нём.
- Исправлена целостность синтаксиса Html::a, createUrl, redirect и т.п. Наконец-то ! :)
- Pjax виджет. Позволяет оборачивать другие виджеты, формы, ссылки - для обработки запросов через Ajax. Автоматически меняет ссылку в броузере через pushState.
- GridView поддерживает обновление через pjax
- Добавлены метод getIsPjax и заголовок HTTP_X_PJAX
Специальный метод
renderAjax
> Этот метод похож наrenderPartial()
, кроме того, что не рендерит и не возвращает результаты с JS/CSS скриптами и файлами, зарегистрированных в представлении.Добавлена поддержка парсинга данных JSON запроса в Request::getRestParams()
Обсуждение "аттрибутов БД" или "виртуальных свойств". Как я понял дискуссию - в итоге ничего такого не будет. > Сейчас вы можете добавлять публичные свойства АР модели которые не будут сохраняться в БД, но будут валидироваться. Пример этого есть с полем пароля в advanced app. Аттрибуты - это поля, сохраняемые в БД, публичные свойства - нет. Но обе сущности можно валидировать.
Графический интерфейс менеджера расширений Yii2 (в процессе)
- Генератор расширений Yii2 в виде Gii модуля
- Рефакторинг встроенных поведений. AttributeStampBehavior, BlameableBehavior, TimestampBehavior. А также обсуждение предложения добавить больше стандартных поведений по типу "SoftDelete", "Translatable" tec.
- Вариант использования вложенных документов в MongoDB ActiveRecord. Я работал с подобными схемами с Mongo в Yii1 и хочу сказать, что в любом случае они требуют "ручной обработки". Да и вобще встроенные документы и массивы не показали на практике большой практичности
- Новый подход к фикстурам - теперь это классы. С зависимостями, конструкторами и т.п.
- Возможность откатить миграции по абсолютной дате "накатывания"
- Обновления внешнего вида панели дебага
Расширение для парсинга Markdown от @cebe теперь используется официально. Хорошая работа, когда все фичи будут завершены станет действительно одним из лучших скриптов для работы с Markdown как и было обещано : > Все существующие реализации были либо медленные, либо не расширяемы. Поэтому я решил улучшить два этих фактора в новой реализации.
- DynamicModel - класс Модели для реализации динамической валидации "на ходу"
$model = DynamicModel::validateData(compact('name', 'email'), [ [['name', 'email'], 'string', 'max' => 128]], ['email', 'email'], ]);
Хотите быстро попробовать работу с Yii2 фрэймворком ?
Так пробуйте !
Yii2 Advanced app в Vagrant с Puppet
Расширения для Yii2
- @kartik-v сделал замечательную коллекцию полезных вспомогательных классов и расширений для Yii2
- Расширение jQuery Flot для Yii2
- yii2-resource-manager-component
- yii2-syntaxhighlighter
- yii2-bootstrap-daterangepicker
- yii2-fullcalendar
Полезные заметки по работе с Yii2
[Упс, у меня `"unexpected '[', expecting ')' in ../vendor/yiisoft/yii2/yii/Yii.php on line 25"`](https://github.com/yiisoft/yii2/issues/2582) > Просто используй PHP 5.4 :)
Один Url Rule - чтобы отлавливать все запросы >
'<action:\w+><data:(.*)?>' => 'site/<action>'
Как быть с
"use Yii;"
в файле представления > cebe :use Yii;
для импорта класса Yii в текущее пространство имён. Т.к. файл представления уже в корневом пространстве имён, где также обитает класс Yii то и импортировать его не надо. Отсюда и ошибка.Как добавить связь в модели "на лету" в Yii2 ? > qiang : Итак имя связи динамически зависит от конфигурации так ? Надо сделать небольшой финт ушами для такой динамической конфигурации. Переопределить
Behavior::hasMethod()
и возвращать "true" дляgetRelationName
. ПереопределитьBehavior::__call()
и реализоватьgetRelationName
.Добавление скоупа по-умолчанию AR > Да в Yii2 этот функционал "выбросили", т.к. с ним было много проблем. Но дефолтный скоуп можно эмулировать примерно так ~~~{.php} class Post extends ActiveRecord { public static function createQuery($config = []) { $config['modelClass'] = get_called_class(); return (new PostQuery($config))->active(); } }
class PostQuery extends ActiveQuery { public function active() { $this->andWhere(['status' => Post::STATUS_PUBLISHED]); return $this; } } ~~~
Как держать скрытые данные в gridview > qiang : Необходимо сконфигурировать
GridView::rowOptions
Как постоянно обновлять Assets во время разработки? > vova07 : 1) В нужных asset bundle (нужно указывать это в каждом бандле): ~~~ public $publishOptions = [ 'forceCopy' => true ]; ~~~ > 2) Используя symlink (задать в файле конфигурации компонента): ~~~ 'assetManager' => [ 'linkAssets' => true ] ~~~