Перейти к содержимому

Проектные решения

В этом документе перечислены проектные решения, принятые после обсуждений. Без веских причин менять их не стоит. Любые изменения должны быть согласованы с core-разработчиками.

  1. Когда поддерживать псевдонимы путей псевдонимы путей стоит поддерживать для свойств, которые настраиваются через конфигурацию, потому что это удобно. В остальных случаях поддержку псевдонимов стоит ограничивать.
  2. Когда переводить сообщения сообщения нужно переводить, когда они показываются конечному пользователю и имеют для него смысл. HTTP-статусы, исключения о коде и т.п. переводить не надо. Консольные сообщения всегда на английском из-за проблем с кодировками и кодовыми страницами.
  3. Добавление новых auth-клиентов для упрощения поддержки новые auth-клиенты в core-расширение не добавляются. Их нужно реализовывать как пользовательские расширения.
  4. При использовании замыканий рекомендуется включать все передаваемые параметры в сигнатуру, даже если не все используются. Так проще модифицировать или копировать код: вся информация видна сразу и не нужно искать доступные параметры в документации. (#6584, #6875)
  5. Предпочитать int вместо unsigned int в схеме базы данных. int можно представить в PHP как integer. Unsigned int на 32-битных системах пришлось бы хранить как строку. Хотя unsigned удваивает диапазон, если таблице нужно такое пространство, безопаснее использовать bigint или mediumint. https://github.com/yiisoft/yii/pull/1923#issuecomment-11881967
  6. Помощники (helpers) vs отдельные нестатические классы
  7. Цепочки вызовов сеттеров стоит избегать, если в классе есть методы, возвращающие значимые результаты. Цепочки допустимы, если класс является билдером, где все сеттеры меняют внутреннее состояние: https://github.com/yiisoft/yii2/issues/13026
  8. Глобальный обработчик исключений/ошибок используется вместо локального try-catch, потому что он надёжно перехватывает деструкторы и всё, что происходит за пределами метода run(), включая bootstrap. См. #14348.