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

Автор: Aport Суббота, Январь 31st, 2015 Нет комментариев

Рубрика: Язык PHP

Решил опубликовать информацию о соглашениях разработчиков, при разработке на 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

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

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты