Composer: Управление версиями


Оригинал: Composer Versioning

Если вы не знаете, что такое Composer, немедленно переходите на сайт Composer и начинайте изучать.
Я знаю многих людей, которые сталкиваются с ограничениями, связанными с использованием Composer-зависимостей. Надеюсь, этот пост поможет пролить свет на то, почему некоторые моменты при работе с версиями являются нежелательными и как их избежать. Я начну свой пост с наихудшего из возможных сценариев и буду двигаться по мере улучшения ситуации.

Читать дальше →

Grunt.js: волшебная палочка для фронтенд-разработчика

На сегодняшний день почти любой сайт, если он хоть немного сложнее домашней странички любимого кота, хранит под своим капотом кучу файлов с тоннами кода на css и javascript. Недобросовестные разработчики, ссылаясь на быстрый интернет пользователей, не стесняются выкатывать на продакшн свои творения в формате «as is», совсем не думая о том, что доля мобильного траффика растет как на дрожжах, а высокой скоростью мобильный интернет нас порадует еще очень нескоро. И это лишь один из поводов всерьез задуматься о грамотной сборке и оптимизации фронтенда. Нет, серьезно, берите свои многочисленные jquery-плагины, js-модули, виджеты, библиотеки, овощи там, рожь, пшеницу, вот это все, и минифицируйте, конкатенируйте, тестируйте, компилируйте, а такая магическая штука, как grunt.js, поможет в этом с помощью всего одной команды в консоли.

Читать дальше →

CSS-препроцессор Stylus: плюсы, минусы, подводные камни

Начиная разговор о Stylus, прежде всего стоит ответить на резонный вопрос «зачем вообще использовать препроцессор?». Все очень просто — это сэкономит твое время, а дополнительными бонусами будут:
  • удобная поддержка и расширение проектов
  • автоматизация рутинных задач
  • «объектно-ориентированный» css
  • возможность быстро создавать «темы» для интерфейсов

stylus
На сегодняшний день самыми популярными препроцессорами являются SASS, LESS и Stylus. О первых двух написано довольно много, а вот Stylus незаслуженно обделен вниманием, несмотря на то, что имеет ряд преимуществ
Читать дальше →

Шаблонизаторы

Оригинал: On Templating

В последнее время я много работал с различными шаблонизаторами. Для последнего проекта требовалось повторное использование одного и того же набора шаблонов в приложениях JS и PHP (в сочетании с History API обеспечивается бесшовное динамическое поведение, но все еще имеющее сырой вид). На самом деле, сегодня есть только одно решение для такого рода задач — шаблонизатор Mustache. Я многому научился, работая с Mustache, и он действительно изменил мою точку зрения на сложные конструкции кода.

Читать дальше →

Поведение и события

Оригинал: Behaviors & events

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

Читать дальше →

Как разобраться в иерархической системе RBAC

Оригинал: Getting to Understand Hierarchical RBAC Scheme

Authentication and Authorization — это хороший учебник, в котором, помимо прочих тем, описываются основные аспекты реализации иерархической системы RBAC в Yii. Но сколько я ни читал этот толковый учебник, я не мог понять, как именно работает иерархия. Я нашел, как определить авторизацию иерархии, как оцениваются правила управления, как настраивается authManager, но почти ничего не обнаружил о том, как строить свою иерархию, в какой последовательности проверяются ее узлы, когда проверка останавливается, и каков будет результат проверки.

У меня ничего не оставалось, кроме как начать самому копаться в коде Yii. В этой статье я хочу представить вашему вниманию свои выводы по данному вопросу. Отмечу, что разобраться в коде Yii не представляет особых сложностей, так как он хорошо структурирован. Каждый может это сделать, но следующая информация поможет вам сэкономить время, особенно если вы новичок в работе с Yii-фреймворком.

Я должен сказать, что понять смысл статьи было бы намного проще, если бы вы ознакомились с вышеупомянутым учебником. Особенно начиная с темы Role-Based Access Control.
Давайте рассмотрим пример иерархии, который приведен в учебнике (здесь показано, как система безопасности может быть построена для некоторых блогов):

Читать дальше →

Руководство для проектирования хорошей схемы базы данных

Оригинал: Guidelines for good schema design

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

Первый и наиболее важный момент заключается том, что Yii-приложения широко
используют шаблон ActiveRecord. Исходя из этого, все конструктивные соображения
направлены на оптимизацию такого использования, а не на человека, который будет
составлять сложные SQL-запросы. В самом деле, многие из проектных решений напрямую
конфликтуют с передовой практикой для создания дружественных SQL-схем.

Здесь идет речь о создании кода, который могут читать и понимать другие люди, где
названия точно передают смысл. Если не следовать этим простым правилам, то за
получившимся кодом будет гораздо сложнее следить.

Это особенно верно, в случае если вы просите о помощи на форумах или на канале #yii:
использование неподходящих имен, которые не отражают смысла, порождает много
вопросов и уточнений. Вы получите меньше справочной информации, чем могли бы.

Согласованность играет очень большую роль.

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

Читать дальше →

Создание своего правила валидации (validation rule)

Оригинал: Create your own Validation Rule

Иногда, стандартные правила валидации фреймворка Yii, могут не удовлетворять треованиям системы. В этом случае необходим создать свое правило валидации.

Быстрый способ

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

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

Прежде всего в вашем классе модели вам придется добавить две константы:
const WEAK = 0;
const STRONG = 1;


Читать дальше →

Поиск и сортировка связанных моделей в CGridView

Оригинал — Searching and sorting by related model in CGridView

Допустим, у нас есть две модели и отношения между ними:
class Author extends CActiveRecord {
...
}
 
class Post extends CActiveRecord {
...
    function relations() {
        return array(
            'author'=>array( self::BELONGS_TO, 'Author', 'id_author' ),
        );
    }
...
}
в списке сообщений, вы хотели бы показать имя автора в колонке, позволить сортировать по этой колонке и, вероятно, дать возможность отфильтровать по подстроке имени автора. Лучшее решение (на мой взгляд), чтобы обеспечить все эти возможности:

Читать дальше →

Правило валидации "safe", для тех, кто в танке

Оригинал — Understanding «Safe» Validation Rules

Вступление

Зачастую, начинающие Yii программисты, непонимают для чего нужно правило валидации «safe». Эта статья должна прояснить путанницу, и заодно объяснить, что такое саммовое присваивание.

Вкраце. Правила валидации служит двум целям:
  1. Убедиться, что данные переданные через форму, введены корректно.
  2. Определить, какие поля могут быть назначены переменной $model.
Они связанны, но она не являются одним и тем же.

Взглянем на набор правил проверки

Перед тем, как начать работу, мы продемонстрируем Вам типовые правила проверки данных модели. Наш пример взят из блога Tutorial. Модель «User» находится в protected/models/User.php.
// protected/models/User.php
    ...
    public function rules()
    {
        return array(
            array('username, password, salt, email', 'required'),
            array('username, password, salt, email', 'length', 'max'=>128),
            array('profile', 'safe'),
        );
    }

Правила проверки определяются из массива array(...). Содержит список атрибутов, имя валидатора, а также дополнительные параметры, необходимые различным валидаторам. Также может содержать ключевое слово «on», указывающее сценарий валидации, но мы не будем описывать это в статье.

Читать дальше →