Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
by25

Andrey Kulikovsky

Веб-разработчик
  • 35
    вклад
  • 1
    вопрос
  • 51
    ответ
  • 27%
    решений
Ответы
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Какую книгу или видеокурс посмотреть по php oop, pdo, шаблоны проектирования?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    1. Мэтт Зандстра "PHP: объекты, шаблоны и методики программирования" - Врубиться в ООП
    2. Эрик Фримэн и ко "Паттерны проектирования" (Head First) - Влюбиться в ООП
    3. Эрик Эванс "Предметно-ориентированное проектирование" - научиться проектировать сложные системы
    4. Крэг Ларман "Применение UML 2.0 и шаблонов проектирования" - про проектирование, глубокое понимание ООП
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Где в Symfony 2 хранить интерфейсы?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Всегда организовываю структуру так, чтобы интерфейсы лежали в нужной подсистеме. Т.е. максимально близко к реализации.

    Например:
    Mapper/MapperInterface (Можно и без постфикса Interface, тут дело вкуса)
    Mapper/MapperImplementation1
    Mapper/MapperBlaBlaBla2
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Создание мобильной версии?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Мы делаем всегда поддомен, если нельзя сделать адаптиву, вида m.domain.com.
    Сеошники думаю подскажут лучше. Но у нас только на одном клиентском проекте моб. версия закрыта для поисковиков, остальные же не парятся по этому поводу.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как делать авторизацию Symfony + Angular?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Мы используем JWT для авторизации.
    Годный бандл - https://github.com/lexik/LexikJWTAuthenticationBundle + в доке указаны сторонние (для cors и т.д.)
    Для ангуляра - есть много решений или свой провайдер очень легко реализовать.

    Описание jwt - jwt.io + на хабре было несколько статей.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как одновременно тестировать ветки github?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Continuous Integration (https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%BF%D...
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как перевести symfony 2.8 в production mod?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    1. В symfony-standart app.php - это prod-окружение, для дева - app_dev.php или смотрим строчку в app.php:
    $kernel = new AppKernel('prod', false);
    2. Ssh нужен, любой нормальный хостер предоставляет ssh.

    А вообще, думаю, начать стоит с документации по фреймворку - symfony.com/doc/current/index.html
    Ответ написан более трёх лет назад
    9 комментариев
    9 комментариев
  • Где вы вызываете метод doctrine flush() для сохранения записи в БД?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    1. Всегда в контроллере.
    2. Похожий вопрос - Doctrine ORM Лучшие практики?
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Как прописать путь к public файлам AppBundle?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    {{ asset('bundles/app/my_file.js') }}

    И команду выполняем с префиксом --symlink
    bin/console assets:install --symlink
    Ответ написан более трёх лет назад
    5 комментариев
    5 комментариев
  • CacheProvider, какими стандартами и практиками пользоваться при написании на php?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Лучше создаввать конкретный экземпляр класса, вида RedisCacheProvider реализующий общий интерфейс, наприер CacheProviderInterface.
    Подсмотреть можно здесь: https://github.com/doctrine/cache

    Также, создание объектов я бы вынес в DI-контейнер. И почитайте про инверсию зависимостей (если нужно).
    Ответ написан более трёх лет назад
    3 комментария
    3 комментария
  • Где найти примеры хорошо написанных веб-приложений?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Как вариант можно поискать на github сайты самих фреймворков или опен-сорс решений.
    Например: https://github.com/laravel/laravel.com
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Какую выбрать версию Symfony для нового большого проекта?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Берите 3.1.x и после выхода мажорной версии обновляйтесь. Как правило api стабильный и миграция совсем безболезненная.
    После можно остановиться на lts-релизе 3.4
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как в createQueryBuilder достать данные из ManyToMany?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Если выгружать сущности полностью:

    $query= $this->
                ->createQueryBuilder()
                ->select('b, users')
                ->from(B::class, 'b')
                ->join('b.users', 'users')
                ->where('b.id = :id')
                ->setParameter('id', $id)
                ->getQuery();


    Обращаем внимание на строчку select('b, users')

    PS. И Doctrine довольно сложный инструмент, как выше советуют - читайте документацию.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • "Сильные" книги по Symfony и архитектуре приложений?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    1. Мэтт Зандстра "PHP: объекты, шаблоны и методики программирования" - Врубиться в ООП
    2. Эрик Фримэн и ко "Паттерны проектирования" (Head First) - Влюбиться в ООП
    3. Эрик Эванс "Предметно-ориентированное проектирование" - научиться проектировать сложные системы
    4. Крэг Ларман "Применение UML 2.0 и шаблонов проектирования" - про проектирование, глубокое понимание ООП
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Какой тут паттерн нужен?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Ваш класс очень похож на объект бизнес-логики (domain entity).
    Предпочтительно использовать при создании объекта и установки значений конструктор (entity всегда должна быть валидной) и постараться избавиться от внедрения зависимости через конструктор, например так:

    public function updatePassword($plainPassword, PasswordEncoderInterface $encoder) {
        $this->password = $this->encoder->encode($plainPassword);
    }


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

    public static function create($userName, $email) {
        $user = new self();
        $user->username = $username;
        // ...
        return $user;
    }
    
    public static function createFromMyVariant($uid) {
        $user = new self();
        // ...
        return $user;
    }
    Ответ написан более трёх лет назад
    14 комментариев
    14 комментариев
  • Куда загружать изображения для сайта?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Купить второй впс (много места, остальное по минимуму) и лить туда всю статику любым удобным способом (ftp, ssh и т.д.).
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Перехват обращение к свойству объекта?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Обращаться к свойству через геттер/сеттер.

    class Foo {
        private $param;
    
        public function getParam() {
            //... тут своя логика
            return $this->param;
        }
    }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • В каких случаях используются ActiveRecord или Doctrine?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    ActiveRecord имеет смысл использовать, если ваша модель хорошо ложаться на реляционную структуру данных. Т.е. свойства классов соответствуют полям таблицы.

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

    Для большинства сайтов и несложных проектов active record - хороший вариант. Для сложных проектов - Doctrine.

    Про использование orm vs pdo выше ответил OnYourLips
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Doctrine ORM Лучшие практики?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    1. Никаких сеттеров. Entity всегда дожна быть валидной (установка значений через конструкторы, именованные контсрукторы). Если нужно менять состояние - делаем осмысленные методы, типа:
      public function updatePassword($plainPassword, EncoderInterface $encoder) {
          //...
      }
      public function updateProfile(UserProfile $profile) {
          //...
      }

    2. Вадидация должна происходить в приложении на более высоких слоях. (Валидируем request, command и прочее).
    3. Очень удобно использовать Embedded-object (doctrine-orm.readthedocs.io/projects/doctrine-orm/... в качестве Value-objects.
    4. flush() всегда делаем в контроллере (в верхнем слое приложения) и забываем про такую конструкцию $em->flush($myEntity); Суть такая: наше приложение работает с бизнес-объектами (domain-objects), меняет их состояние, однако про сохранение (коммит изменений) слой модели не должен знать, это не его задача. Все изменения фиксируются в конце запроса.
    5. Используйте Domain-events - очень удобная штука.
    6. Иногда очень полезно отказаться от автогенерации доктриной id, можно использовать uuid.


    И дострина многим не нужна, часто достаточно active-records.
    Doctrine даёт большой профит только если доменна логика сложная, ну все это хорошо ложится на проектирование по модели (DDD).
    Ответ написан более трёх лет назад
    7 комментариев
    7 комментариев
  • Какой открытый фрейморк выбрать для организации документооборота?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Если PHP. то Symfony3 - отлично ложиться на средние и большие проекты + LTS релизы.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Render полей через сниппеты?

    by25
    Andrey Kulikovsky @by25
    Веб-разработчик
    Как вариант эти фрагменты нарезать на минишаблоны и после их инклудить:

    {# fields/_ first_field.html.twig #}
    
    <div class="place-for-first-field">
        <div class="list of classes for first field">		
            {{ content.getField('first_field')  . . .  }}
        </div>
    </div>


    И инслудим в шаблон:

    {{ include('fields/_ first_field.html.twig', {'content': myContent}) }}


    Если возвращаемые значения объекты и имеют фиксированное поведение (и отображение) и постояно реюзается в различных проектов можно создать TwigExtension, но это трудозатратнее.
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • Следующие →
Самые активные сегодня
  • Sozdavan
    • 15 ответов
    • 0 вопросов
  • Evgenii
    • 10 ответов
    • 0 вопросов
  • Dr. Bacon
    • 8 ответов
    • 0 вопросов
  • Drno
    • 6 ответов
    • 0 вопросов
  • Денис
    • 5 ответов
    • 1 вопрос
  • Rsa97
    Rsa97
    • 4 ответа
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации