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

Первые короткие заметки о 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. Поэтому, не стесняемся. =)

share via vkontakte share via facebook share via mailru share via odnoklassniki share via twitter

Комментарии [2]

[Никола] 12 нояб. 2014 г., 14:53:27

Напиши чем пользуешься в Yii2. Очень интересно узнать.)))

Администратор [BUPY7] 10 дек. 2014 г., 14:35:54

Да в общем-то ничем особенным. Пока что нет каких-то хороших наработок, которые можно таскать из проекта в проект, потому что у меня проекты все разнотипные и везде нужно что-то своё и особенное. Все нужные расширения, которые были мне необходимы и которые не пришлось делать самому я нашел у kartik_v, за что ему огромное спасибо. Бывает, иногда отправляю пул-реквест с какими-то мелкими дополнениями для его расширений. Пока их было только 2е. =)

В целом и в общем, вторая версия фреймворка мне очень сильно понравилась. Это шикарно, особенно пространство имён. Хоть и в первой версии они имели поддержку, но реализовано это было ужасно. Во второй версии всё исправили и сделали шедевр.

Сейчас я делаю свой первый проект на Yii2 и время от времени делаю какие-то посты в блог, всегда стараюсь написать что-то интересное. Заходите, читайте, еще будет много вкусностей. =)

Ну и часто интересуются, буду ли я использовать Yii первой версии - нет, все будущие проекты я буду писать на второй версии.