Задать вопрос
  • Как сделать, чтобы по событию в методе одного сервиса с передачей параметра запускался другой сервис?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Поизучал материалы в инете - жуть как вся эта тема описана и у каждого по-своему - не получилось собрать единую "картинку"

    Не надо никаких материалов в интернете. Есть официальная документация, которая нормально описывает суть работы событий в Symfony.
    Сервис в одном из своих методов по факту конкретного условия if должен сделать так, чтобы запустился метод другого сервиса с одним параметром из текущего.

    Что мешает вызвать из сервиса A сервис B?
    Ключевое слово - ЗАПУСТИЛСЯ - типа как будто сам.

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

    Если вы вызовете событие, произойдёт ровно то же самое. Параллельное выполнение имеет мало общего с исключениями.
    Пока понял, что в методе текущего сервиса нужно прописать создание события, а запускающийся сервис будет являться слушателем или подписчиком - сервис надо так же превратить в слушателя. Обязательно ли создавать класс-слушатель и т.д.?

    Вам вообще по тому как вы описали события не обязательно использовать. Но если будете - нужно будет делать EventListener или EventSubscriber. Читайте документацию.

    А вообще, ВОЗМОЖНО, вам нужны очереди. То есть, можно посмотреть в сторону RabbitMQ, ZeroMQ и т.п. Суть будет такая:
    У вас есть сервер очередей и пул воркеров, которые постоянно опрашивают сервер очередей на предмет новых заданий.
    В вашем коде на PHP сервис отправляет сообщение серверу очередей с параметрами задания и продолжает делать свою работу. В это же время один из воркеров пула получает это задание и начинает его обрабатывать. Но это всё происходит не в рамках одной сессии приложения Symfony, а грубо говоря, работают два отдельных приложения, которые связаны через сервер очередей: ваше приложение на Symfony, которое отправляет задание в очередь и воркер(ы), которые обрабатывают очередь (вообще могут быть написаны на другом языке).
    Ответ написан
  • Почему Composer удаляет мои файлы?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Вполне возможно, что эти пакеты были не зависимостями вашего приложения, а его зависимостей. Если они вам нужны - надо указать их явно в корневом composer.json.
    Ответ написан
  • Должен ли джуниор PHP верстать?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Должен ли джуниор PHP верстать?

    Джуниор PHP - не должен. Но надо понимать, что "джуниоров PHP" чаще всего ищут туда, где разделения труда толком нет. И на самом деле это чаще не "джуниор PHP", а "верстальщик шаблонов для CMS".
    В общем, набор требований зависит от компании. Можно устроиться джуниором туда, где вёрсткой занимается фронтендер, а можно туда, где всю работу придётся выполнять самому.
    Ответ написан
    2 комментария
  • Как добавить в видеофайл mkv дополнительную звуковую дорожку?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    mkvtoolnix
    Ответ написан
    Комментировать
  • Будет ли влиять на производительность такой запрос?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    или нужно так
    $from = $book->getFromBook()->getAlias();
    вытаскивать значение сущности, а не саму сущность

    Если alias - это не поле, которое является Id (судя по вашему маппингу, это не так), то у вас будет всё равно вытащена вся сущность Book.
    Только в случае, если вы сделаете
    $book->getFromBook()->getId()
    У вас не будет запроса в БД.
    дальше $from я передаю параметром в другой репозиторий, чтобы осуществить другой поиск

    Понимаете, в чём дело. Если вы начинаете вместо объектов через ORM тащить из базы значения конкретных полей, возможно, вам вообще не нужна ORM.

    А вообще, вполне вероятно, что вы пытаетесь экономить на спичках. У вас сколько таких запросов будет на странице делаться?
    Ответ написан
    2 комментария
  • Как создать CRON запрос?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Ответ написан
    Комментировать
  • Регулярка на PHP по на кол-во символов?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Вам НАСТОЛЬКО лениво изучить возможности PHP и регулярных выражений?
    Если надо просто 8 символов:
    https://secure.php.net/manual/ru/function.substr.php
    Если надо извращаться именно с регуляркой:
    https://ru.wikipedia.org/wiki/Регулярные_выражения...
    Ответ написан
    Комментировать
  • Нужен ли Linux для начинающего разработчика?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Современный фронтенд довольно плотно связан с node.js, npm, bower и прочим. Всё это удобнее использовать в Linux-системах. Работать это, конечно, будет и в Windows, но не так удобно.
    С другой стороны, в Linux нет Photoshop и если вы занимаетесь вёрсткой по макетам - это может быть проблемой. Кто-то запускает его в Wine, кто-то использует виртуальную машину, кто-то пытается работать в GIMP.
    Универсального решения, к сожалению, нет.
    Ответ написан
    2 комментария
  • Процедурный КРУД PHP?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Паттерн MVC не имеет никакого отношения к тому, что вы хотите сделать.
    Ответ написан
    Комментировать
  • Почему после удаления строки из базы данных и добавления новой автоинкремент добавляет единицу как будто ничего не удалялось?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Несколько уточню, а то тут никто по делу так и не сказал.
    Автоинкремент не убавляется потому, что это привело бы к проблемам с консистентностью. Если вы удалили строчку, а потом вставили новую - это уже другой ресурс и ID у него должен быть свой. Если вы хотите что-то обновить - для этого у вас есть UPDATE.
    Вы, конечно, можете насильно вставлять с конкретным ID после удаления записи, но вероятнее всего, вы что-то делаете не так.
    Ответ написан
    Комментировать
  • Как правильнее подтянуть форму на главную?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Best Practice
    Define your forms as PHP classes.

    https://symfony.com/doc/current/best_practices/for...

    Таким образом вы сможете использовать одну и ту же форму в разных местах выполняя DRY.
    Ответ написан
  • Объясните пожалуйста, как работает обновление записи в БД Symfony/Doctrine?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если бы у нас передавалось две формы сразу, например Vendor и User, появился бы так же объект User и он бы автоматически присвоился переменной $user? Обычно, нужные данные я вытаскивал непосредственно из переменной $request и присваивал их "руками", куда мне нужно (хотя, такой вариант мне тоже безусловно нравится).

    ParamConverter ориентируется на тайпхинтинг в параметрах экшена и автоматически вытягивает вам нужную сущность из БД согласно параметрам маршрута.
    Здесь в первой строке идёт проверка на то, что форма заполнена, а дальше происходит какая-то магия не ясная мне. У нас нет никаких переменных, но делаем сброс буфера. Откуда Doctrine знает, что именно и куда нужно записать?

    Никакой магии. Изучайте как работает ORM типа Data Mapper. У вас есть Entity Manager, который "перзистит" (persist) определённые сущности. В данном случае у вас в него сущность попадает при обработке формы прозрачно (как бы за кадром) через так называемые DataTransformers.
    делаем сброс буфера

    В общем, посмотрите, что такое Flush относительно этой ORM. Например, тут.
    Ответ написан
    Комментировать
  • Как использовать класс базы данных в методах других классов?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Боюсь даже спрашивать, почему вы решили, что $GLOBALS лучше, чем передача параметра в конструктор.
    Срочно читайте весь www.phptherightway.com
    В частности по теме: www.phptherightway.com/#dependency_injection
    Ну и можете посмотреть что-то такое, например: php-di.org/doc/understanding-di.html
    Ответ написан
  • Будет ли upwork брать 20% комиссию за существующего клиента?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    https://support.upwork.com/hc/en-us/articles/21106...
    10% for total billings with a client between $500.01 and $10,000

    Вот тут считается:
    https://www.upwork.com/i/pricing/freelancers/?tsf=1
    Ответ написан
    Комментировать
  • Аналог работы в js || для php?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    $var2 = $var1 ?: null;
    Ответ написан
    1 комментарий
  • Symfony / Doctrine 2, как реализовать предварительную загрузку связей (одним запросом)?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Три варианта:
    - fetch=EAGER у связи (см. ответ @BoShurik)
    - setFetchMode() у запроса (см. ответ @BoShurik)
    - Указать конкретно JOIN в запросе

    Первый вариант, естественно, хорош только тогда, когда загружать коллекцию нужно ВСЕГДА.
    Ответ написан
    2 комментария
  • Чем дебажить утечки памяти в php?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    там используется доктрина, возможно она что то не подчищает

    А вы чистите Identity Map?
    И точно какой-нибудь XDebug не включен?

    А вообще - вам нужен профайлер. Выше один уже предложили. Есть ещё xhprof и blackfire.io.
    Ответ написан
    Комментировать
  • Symfony как сделать регистрозависимвый поиск с помощью entity manager?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Если вы не заметили, вы получаете у EntityManager объект репозитория, к которому и обращаетесь. Вам нужно репозиторий для вашей сущности расширить методом, который будет делать регистронезависимый поиск.
    Ответ написан
    Комментировать
  • Как правильно получить часть данных из отношения в Symfony?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Не касаясь того, насколько правильно у вас это с архитектурной точки зрения, могу сказать, что вы можете в методе getOwner() выбрать именно то, что вам нужно воспользовавшись фильтрацией по критерию в коллекции.
    Взять всех пользователей через аннотации и фильтровать на стороне пхп, сделать отдельный запрос без аннотаций или можно аннотациями как-то это сделать?

    А вот здесь вы просто глупости говорите. Аннотации - это всего лишь один из синтаксисов описания маппинга сущности. Почитайте документацию Doctrine, чтобы лучше понять, с чем имеете дело.
    В гугле не забанен, просто даже не знаю как это загуглить.

    Почитайте документацию по Doctrine ORM. В ней достаточно важных моментов, которые лучше узнать до начала работы, чтобы потом не переписывать всё, когда узнаете о них.
    Ответ написан
  • Отличаются ли по скорости работы одна и та же программа 32бит и 64бит на win 7 64бит?

    skobkin
    @skobkin
    Гентушник, разработчик на PHP и Symfony.
    Зависит от разных факторов:

    - Чем занимается эта программа
    - Может ли использовать современные процессорные инструкции для оптимизации
    - Какой набор флагов при сборке вы используете для 32-битных архитектур и для 64-битных.

    Если взять сферический пример в вакууме, когда собирая 32-битную версию вы поддерживаете всё начиная от 486 процессора, а программа при этом занимается математическими расчётами и поддерживает все инструкции, которые появились с момента выхода 486 до появления, скажем, Athlon64, то при использовании 64-битной программы собранной со всеми возможными оптимизациями вы можете получить значительно более высокую производительность.
    Либо же вы можете собрать программу исключительно под ваш очень новый процессор и получить ещё большее быстродействие. Если, конечно, программа предусматривает использование тех возможностей, которые появились в вашем поколении CPU.

    В общем-то, всё несколько сложнее, чем написано у SyavaSyava в ответе. Однако, зачастую производители ПО определяют некую нижнюю планку поддержки для каждой архитектуры и ПО собирается с расчётом на поддержку процессоров определённой давности. Это, конечно, не исключает, что ПО может поддерживать оптимизации не только на уровне хардкода и директив компилятора, но и детектировать возможности железа в рантайме, и подключать модули для оптимизации.

    UPD: Отвечая про Photoshop. Данный пакет, вероятнее всего, лучше будет работать в 64-битной версии, т.к. там многое завязано на математику и преобразование изображений (глупо было бы не использовать возможности новых процессоров). К тому же возможность использовать больше памяти ему точно лишней не будет.
    Ответ написан