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

Именование поля с идентификатором

Практически каждый разработчик именует поля для связи с другой таблицей в формате <имятаблицы>_id. Но, вдруг в проекте вы замечаете, что в одном или в нескольких местах совсем не такое именование, а просто <имятаблицы>. Или наоборот, связи нет, а именовано по подобию <имятаблицы>_id. Это связано с тем, что когда-то эти поля имели (или не имели) связи с таблицей, а позже решили вынести все в код (или в таблицу). В итоге получается не очень красиво.

Читать далее

Создание форм в ZF3

Создание форм в ZF3

Мне очень нравится Zend Framework с выхода 2ой версии, но никогда не нравились формы. Формы в Zend Framework - это, ужас. Причем, мне не ясен подход разработчиков вообще, и не ясно, почему они считает это нормой. Чего же в них плохого?

Плохо то, что мы явно нарушаем принцип единственной ответственности, явно указываем тип поля у входного значения, расширяем элементы через декораторы. Это все очень плохо. Я не хочу знать вообще: какой тип поля у входного значения; я не хочу заботится о представлении в форме; я не хочу заботится о том, как это все будет выглядеть. Я просто хочу указать, что я жду. Все. На этом ответственность формы заканчивается. Не больше, ни меньше. Но как-то не делать так, как задумано - не получится. В любом случае, от типа поля и от трешовой манипуляции с формой в отображении мы не уйдем. Как я с этим борюсь?

Читать далее

Резервное копирование

Резервное копирование

Пару дней назад я выкатил новую версию расширения для резервного копирования, который:

  • умеет лить на FTP используя LFTP
  • работать на OS X и Linux
  • так же хранит архивы N-дней и позже удаляет самые старые из них
  • архивирует используя TAR
  • работает с MySQL и PostgreSQL

Данный скрипт мне всегда приходил на помощь, и несколько лет он просто кочевал из проекта в проект, пока я не подумал, что стоило бы уже обновить версию, что лежит на GitHub и добавить немного нового функционала.

Если вам дороги ваши данные - используйте резервное копирование. =)

Ссылка на расширение и инструкцию по установке: https://github.com/bupy7/sh-backup

Читать далее

Расширение для работы с URL на Javascript

Как всегда все уперлось к тому, что ничего не нашлось, а очень хотелось. Но, зато нашел куски интересного кода на Gist, которые доработал и выкатил в расширение.

Данное расширение работает с URL, а точнее преобразует строку запроса (query) в объект, и обратно. Плюсом, имеется конкатенация частей URL.

Библиотека очень простая и состоит из одного файла. Больше информации на оф.странице расширения.

Ссылка на расширение: https://github.com/bupy7/js-lib-url

Читать далее

История изменений ActiveRecord модели в Yii2

Данное расширение необходимо всем, кто работает с важным контентом, и хочет иметь историю о всех изменениях по записи. В проектах с частой и очень важной манипуляцией с данными данная возможность очень и очень важна. Иногда не ясно, кто изменил, зачем и когда. Но, не беда, все будет! =)

Расширение имеет единственное хранилище - в базу данных. В файл, увы, реализация мне не нужна, но если кто-то хочется - тот очень легко сможет такое реализовать указав в модуле соответствующий класс хранилища наследовавшись от bupy7\activerecord\history\storages\Base.

Latest Stable Version Total Downloads Latest Unstable Version License

Ссылка на репозиторий: https://github.com/bupy7/yii2-activerecord-history

Читать далее

Обертка Date Range Picker (Bootstrap) плагина для Yii2

Обертка Date Range Picker (Bootstrap) плагина для Yii2

Пошатавшись по GitHub, и поняв, что выбор очень скудный, понял одну вещь: проблема утопающего - дело рук самого утопающего. Поэтому, я взялся за написания обертки над сие прекрасным плагином.

Ссылка на расширение: https://github.com/bupy7/yii2-date-range-picker

Читать далее

Поведение для смены и установки пароля пользователя для Yii2

Продолжаю делать всякие различные расширения упрощающие жизнь в разработке. Данный behavior у меня был достаточно долгое время в проектах и таскался файлом, но, тут я решил, что такое надо прекращать и делать по человечески, чтобы можно было поддерживать пакет отдельно.

Смена пароля довольно интересная вещь, особенно, если это выполняется не в одном месте. Часто вижу в проектах, что в моделях начинают плодить какой-то ужас. Это неправильно, товарищи. Вообще, не правильно даже наличие какого-то кода в модели в методах before<EventName>/ after<EventName>. Правильно стряпать behavior'ы и вешать куда нужно и когда нужно. Но, хрен с ним...

В общем, расширение простое, как сибирский валенок. Читаем README и применяем. Тащемта, удобно жи. =)

Ссылка на расширение: https://github.com/bupy7/yii2-password-behavior

Читать далее

RBAC или роли доступа в Yii2

Много разных вариантов реализации ролей доступа мной было испробовано, пока я не нашел идеально подходящий для меня.

Первое, что мне не нравится в RBAC реализованный в Yii2, это возможность использовать несколько ролей. На самом деле, при правильно реализованной иерархической структуре достаточно одной роли.

Второе, что мне не нравится, это хранение назначений отдельно, т.е. связывание роли с пользователем. И это в коробке вообще никак не отключается. Если нужно действительно это отключить, чтобы случайно другой программист не заюзал - нужно переопределять менаджер авторизации и вешать всякие throw и прочее. Роль, имхо, должна указываться в таблице с пользователем, потому что: если нужно делать дамп, то если назначения хранятся в ФС - придется делать дамп и связей; а если назначения хранятся в БД (а хранить их в БД нет никакого смысла вообще), то такое тяжело поддерживать, если вдруг структура ролей будет изменена; и потом, если хранить назначения с ролями отдельно, то у людей получается жуткий говнокод, если нужно иметь возможность "видеть" роль пользователя и менять её динамически. Поэтому, делать нужно правильно изначально: все роли, правила, иерархию наследования храним в ФС, а связываем все это дело, через поле role в таблице с пользователями.

Читать далее

Хранение и работа с конфигурацией приложения используя базу данных в Yii2

Я был очень удивлен, когда не обнаружил на просторах GitHub и Bitbucket чего-то легкого, простого, и в того же время, мощного расширения для работы с конфигурацией приложения использующее в качестве хранилища параметров базу данных. Ведь не всегда хорошо хранить, например, название сайта в Yii:$app->params[]. Этого, конечно, чаще всего достаточно, но иногда вот такие моменты, как с названием сайта/проекта ставят разработку на "паузу" и"заставляют" продумывать решение. Я и раньше делал нечто подобное для всех своих проектов, но в этот раз я решил, что стоит этому уделить максимум внимания и перестать таскать файлы из проекта в проекта, т.е. моей задачей стало "Сделать модуль конфигурации приложения для Yii2".

Читать далее

Новая версия yii2-widget-cropbox

Готов сообщить радостную новость (по крайней мере для меня), что вышла новая версия кроппера 4.0.0! Лично я доволен как слон.

Изменения были очень весомые и, так как поменялась мажорная циферка в версии, тот как мы все знаем это значит, что расширение уже не совместимо с предыдущим. Поэтому, если хотите использовать в старом проекте, где была версия 3.*, то придется переписать чуточку кода.

Самое главное, что изменилось в кроппере, это то, что мной был написан jQuery плагин, что позволяет использовать кроппер не только в Yii Framework, но и в любых других проектах. В прошлых версиях я использовал обертку над одним готовым плагином для jQuery плюс некоторые дополнения в этот плагин. Но время не стоит, мы делаем код лучше и совершенствуемся. Например, после релиза плагина было замечено, что работает он в разы быстрей предыдущего.

Читать далее