Framework foton
Инструмент для профессиональной разработки web приложений
Правила конвенции Foton

При разработке Framework Foton использовались принципы DRY, SOLID, KISS.

В соответствии с этим при разработке своего приложения старайтесь следовать им:

  • выделяйте функционал в отдельные объекты, либо методы.
    декомпозируйте  решения (разбивайте сложные задачи на простые).
  • пишите код настолько просто, чтобы и через год вы сами смогли в нем разобраться.
  • при написании методов или объектов старайтесь предусмотреть возможность расширения вашего функционала без изменения вашего кода, либо с его минимальными изменениями.
  • При указании путей к файлам работайте через $this->core->git() и указывайте пути от корня системы $FS->path
  • При использовании методов в своем методе используйте сквозные параметры, чтобы в идеале все параметры принимаемые внутренними методами вашего метода косвенно или напрямую зависели от переданной в метод сигнатуры.

Требования к синтаксису:

  • Нежелательно использование альтернативного синтаксиса (через : ?,endif; и т. д.)
  • для облегчения чтения кода и определения пределов алгоритмов в различных IDE, по стандартам конвенции Foton используется стандартный синтаксис 
    if(){}else{],foreach(){},for(){},
  • для представлений используйте функционал шаблонизатора Foton, тогда вместо endif; вы можете использовать @elsif{ваше условие} или @elsif[ваше условие] - конструкции равнозначны.
  • Не используйте  смешанный код (в одном файле css,js,php,html код, это затрудняет поддержку и чтение вашего кода)
  • Соблюдайте чистоту кода и отступы.
    При создании представления внешней части вашего приложения вы также можете использовать другие шаблонизаторы.
  • По возможности не используйте операторы switch case, особенно в сложных алгоритмах и там где количество проверок больше двух, это усложняет чтение кода.

Другие требования:

  • Файлы должны быть в кодировке UTF-8 без BOM-байта.
  • Имена класса и его метода не должны совпадать.
  • Не используйте слишком часто статические методы, когда можно обойтись без них, это увеличивает время работы ваших методов, системе каждый раз приходится инициализировать ваш класс.
  • При использовании большого объема данных для расчетов используйте сохранение данных в переменные, используйте обратный отчет для перебора данных.
  • Используйте буферизацию ob_start() только через стандартные средства системы, иначе это может усложнить рефракторинг вашего приложения в дальнейшем.
  • Не используйте метки и прерывания php без веской на то причины.

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

Используйте обработку ввода данных в модели, либо с помощью класса Foton\Lib\Valid и с использованием соответствующих методов ядра при получении $_REQUEST данных, и других незащищенных данных пользователя перед обработкой контролером.

При изменении метода в дочернем классе используйте по возможности конструкцию по типу такой:

<?php
public function method() {    
    $this_method = parent::method();
    $this_method = $this->new_method($this_method);    
    return $this_method;
}

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

Если вы не хотите видоизменения вашего метода финализируйте его (указав final) и укажите эти методы в комментариях к вашему классу.


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

Общие методы для всей системы вы можете создать в глобальном контроллере,  при обращении к вашему методу в классе вы можете вызвать класс new \CGlobalsSite или же new \CGlobalsAdmin в административной панели, вы можете использовать такую конструкцию 

<?php
if(isGlobalAdmin(название_вашего_mvc)){
     $global = new \CGlobalsAdmin;
}
else{
    $global = new \CGlobalsSite;
} 


а в представлении $glob['вашметод']

© Copyright 2026 Разработано на Framework Foton
Продукт зарегистрирован в Роспатенте