Symfony2 — соглашения разработки

Решил опубликовать информацию о соглашениях разработчиков, при разработке на Symfony 2.

Соглашения кодирования в Symfony2

В целом этого достатночно, но я предлагаю к рассмотрению ниже изложенные дополнительные соглашения, которые нужны:

  • для быстрого понимания логики при работе с кодом
  • для поиска в проекте мест использования похожих по названию, но различных в логике: роутингов, бандлов, сервисов, классов

Именование роутинга

Каждый роутинг должен быть именован согласно правилу:

Имя Бандла + Имя метода

например контроллер бандла ProfileBundle:

...

class DefaultController extends Controller
{
    /**
     * редактируем собственный профиль
     * @Route("/", name="ProfileIndex")
     * урл будет выглядеть так: /profile
     */
    public function indexAction()
    {
        ...
    }

    /**
     * просмотр общедоступной информации о профиле
     * @Route("/{rid}", name="ProfileInfo", defaults={"rid" = 0})
     * урл будет выглядеть так: /profile/123
     */
    public function infoAction($rid)
    {
        ...
    }

    /**
     * получим список текущих сотрудников
     * @Route("/currentCoworkers", name="ProfileCurrentCoworkers")
     * урл будет выглядеть так: /profile/currentCoworkers
     */
    public function currentCoworkersAction()
    {
        ...
    }

    /**
     * просмотр списка задач указанного профиля на указанном языке
     * @Route("/tasks/{rid}/{lang}", name="ProfileTasks", defaults={"rid" = 0, "lang" = "ru"})
     * урл будет выглядеть так: /profile/tasks/123/fr
     */
    public function tasksAction($rid, $lang)
    {
        ...
    }
}

Обратите внимание:

  • CamelCase (верблюжья анотация) в именовании роутингов используется с большой буквы (чтобы показать к какому классу относится роутинг)
  • разрешается использовать множественное число

Именование сервиса

Каждый сервис должен быть именован согласно правилу:

Имя Бандла + Имя директории + Имя файла класса

по сути это CamelCase версия пути к файлу, например сервис src/Intranet/AuthBundle/Security/Handler.php должен быть объявлен так:

services:
    AuthSecurityHandler:
        class: Intranet\AuthBundle\Security\Handler

Исключение составляют сервисы директории Helper, их именование исключает Имя Бандла + Имя директории (Helper), но имя должно передавать смысл использования данного сервиса. Например сервис src/Helper/FormErrors.php должен быть объявлен так:

services:
    FormErrors:
        class: Helper\FormErrors

Обратите внимание:

  • CamelCase (верблюжья анотация) в именовании класса используется с большой буквы (чтобы показать к какому классу относится сервис)
  • разрешается, но не советуется использовать множественное число

В свою очередь включение системных сервисов (к которым мы не собираемся обращаться) принято именовать начиная с слова enable (с маленькой буквы), например:

services:
#   различные функции расширяющие твиг
    enableTwigExtension:
        class: Helper\TwigExtension
        arguments: [@service_container]
        tags:
            - { name: twig.extension }
#   включаем Normalizer, подробнее: http://yapro.ru/web-master/php/symfony-kak-ispolizovati-normalizer.html
    enableNormalizer:
        class: Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer
        tags:
        # помечаем к чему относится этот сервис, это оч. важно, т.к. иначе работать не будет
          - { name: serializer.normalizer }
#   класс проверяющий права доступа пользователя до вызова контроллера
    enableControllerListener:
        class: Helper\ControllerListener
        arguments: [@service_container]
        tags:
          - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

Наш код-стайл

  1. coding-style
  2. стиль-объявления-функций

также обязательно к прочтению:

  1. write-unmain-code
  2. правильный-выбор-имени
  3. выбор-имени

Дополнительные условия нашего код-стайла

1. Если в своем плагине или коде вы хотите называть элемент DOM-дерева "элементом"

Правильно: $node

Неправльно: $elem, $element, $el

2. Объект event

Правильно: event

Неправильно: evt, e

3. Чтобы сохранить this используйте self

Правильно: self = this

Неправильно: that = this

А вы используете какие-либо соглашения?

Оцени публикацию:
  • 0,0
Оценили человек: 0

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » PHP »