Ми}{@лbI4

Блог хеллоуворлдщика

Первые короткие заметки о Yii2

07.11.2014 yii2, заметки

Основательно поработав первую неделю с Yii2 Framework я готов поделиться с вам некоторыми заметками, которые, возможно, будут некоторым полезны.

Алиасы в advanced шаблоне приложения

Скажу честно, с advanced я не работал, но после того, как потребовалось разделить как можно лучше приложение на "кусочки", и обсудив вопрос о структуре моего нового проекта с всеми уважаемым Александром Макаровым - я разделил приложение на несколько самостоятельных частей, которые, по сути, от друг-друга не зависят. После этого, я взглянул на advanced шаблон и был сильно удивлён, когда нашёл схожесть со своим. Что меня больше всего удивило, дак это наличие алиасов backend в backend и frontend в frontend, и вопрос: нафига, когда app указывает на текущую активную часть приложения?! А оказывается есть причина, по которой мне позже пришлось сделать точно так-же: иногда требуется подключать какие-то классы заведомо не зная в какой части приложения мы находимся, поэтому просто прописав backend\to\class\Class мы можем не заморачиваться. Ну и ещё, как совет, всегда начинайте namespace с алиаса части приложения в которой он находится, если это возможно. т.к. ограничите себя от других проблем в ходе разработки.

RBAC

RBAC от Yii1 не так-то, в общем-то, и отличается от того, что сейчас в Yii2. Как по мне, дак сделали куда удобней. Не знаю, как обстоят дела с хранением ролей в файлах, но с хранением в БД всё, практически, тоже самое. Поэтому, не сцым, берём и используем. Подключается всё точно также с некоторыми небольшими изменениями. В остальном - аналогично, как в Yii1.

Composer

Сейчас Composer неотъемлемая часть Yii2. Как я понял, разработчики хотят, чтобы в коде всегда были свежие библы и уменьшение телодвижений при установке, но, увы, иногда бывает так, что автор просто удаляет какую-то библу, что вынуждает делать форки, что, в общем-то, геморно. Я же советую те библиотеки, которые не ваши, просто копировать вручную и подключать. Не забываем удалить из .gitignore папку vendor и указать только те, в которых вы уверены, и которые никуда не пропадут.

Как показало время, да, он нужен. Главное, если используете, всегда подстраховывайтесь и не игнорируйте директорию с расширением на случай удаления пакета. Этого никто не исключает.

Html::button()

В общем как-то напоролся на то, что в Yii2 по дефолту вешается событие submit на все кнопки с типом submit и без него. Поэтому будьте внимательны и явно указывайте тип кнопки, потому что по умолчанию button без указания типа != типу button, - это submit. Либо всегда используйте Html::button(), и если бы у меня не было необходимости создать элемент через jQuery, возможно, о такой мелочи я бы и не узнал.

P.S. Статья будет дополнятся.

SqlDataProvider

Не один я оказался слоупоком. Часто в коде можно видеть чистые запросы к БД. По сути хер на них, так можно. Но в итоге получается, а зачем? Практически все запросы типа SELECT можно выполнить через yii\db\Query. Для вставки в SqlDataProvider, в yii\db\Query есть метод createCommand, который возвращает экземпляр класса yii\db\Command, через который можно получить сам запрос для вставки в SqlDataProvider и параметры. Например:

$query = (new Query)->select('*')->from(Model::tableName())->where(['param' => 'param']);
$command = $query->createCommand();

var_dump($command->sql, $command->params);

И всё. Ничего ручками собирать не нужно, всё готово. =) Производительность не ухудшается, конечно, время на сборку уходит, но не такое больше, а жалкие миллисекунды. Но, если ваш запрос собирается очень долго, то стоит подумать - а действительно это оправдано? Возможно, есть возможность улучшить его.


Также было бы замечательно, если бы читатели указывали в комментариях то, что их интересует, или хотят видеть по Yii2, чтоб я знал чему отдавать предпочтение и на что обращать внимание, а позже написать сюда и известить вас по Email об обновлении. Или, возможно, написать полноценную статью и так же известить по Email. Поэтому, не стесняемся. =)