Задать вопрос
  • Почему '0' > null будет true, а не false?

    @galliard
    Максим Федоров, да не минус это, просто аффтары подобных претензий тупо ленятся почитать доку и вообще изучать новый язык. Они хотят чтоб все везде было как в том языке, который знают они, чтоб лишний раз свой слабенький мозг не напрягать.

    P.S. PHP писали не Cшники, а PERLовики, и много поведения унаследовано именно оттуда.
  • Похожи ли Яп-ы PHP и C / C++?

    @galliard
    Ну нет же) Идея дата-мапинга вовсе не в том чтоб в сервисе насетить даннных в сущность.

    В ActiveRecord первична БД, а объекты лишь отражают её структуру.

    В DataMapper ничто не первично. Структура хранилища и классы существуют и развиваются независимо друг от друга, а для обеспечения персистентности данных делался мапинг, то есть проставлялись соответствия полей классов в полям хранилища. Изначально для этого писались конфиги в xml и модель была более чистой. Именно отделение реализации маппинга (по сути описательного конфига) от реализации класса и есть главная идея дата мапера, а вовсе не то, запускать процесс отправки данных в хранилище будет кто-то внешний. Потом, из соображений практичности, стали применять аннотации, намертво привязав модели к реализации конкретного хранилища и частично убив идею маппинга.
  • Похожи ли Яп-ы PHP и C / C++?

    @galliard
    Максим Федоров, у меня тоже не было учителей, и на усвоение объектное парадигмы мне потребовалось 7 лет. Пример я привел для того, чтоб показать, что даже при наличии таковых года было не достаточно.

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

    Первый видос длится час, может как-нибудь потом посмотрю. Второй видел, и да, мужик дело говорит, но проблема протекания application layer в domain model действительно есть, решать это красиво я сам пока не умею, приходится идти на компромиссы в зависимости от используемых в проекте инструментов.
  • Похожи ли Яп-ы PHP и C / C++?

    @galliard
    Максим Федоров, опять же субъективно. Возможно тот код, который ты считаешь тру-оопшым, я сочту процедурным.

    Ни один из моих джунов за 1 год ОБУЧЕНИЯ так и не смог понять ООП, и когда логика чуть отходит от привычных шаблонов - тут же скатываются в процедурщину.
  • Как сделать поиск по ключам массива PHP?

    @galliard
    Условия задачи вообще не понятны. Что именно ты хочешь получить?
  • Почему не работает composer в open server?

    @galliard
    Basitkhan Mansurov, да. Но в большинстве случаев ngnix и apache не нужны, встроенного сервера в целях разработки достаточно. Если венда - то можно IIS поднять, он уже встроен в венду. А вот php и композер нужно ставить самому обязательно.
  • Почему не работает composer в open server?

    @galliard
    Basitkhan Mansurov, почему люди так любят ставить всякие говносборки вместо того, чтоб поставить себе нормальный софт по отдельности?
  • Как запустить из браузера проект на symfony, под openserver на windows?

    @galliard
    vc4vc, у симфони есть собственный веб сервер для разработки, его можно запустить командой php bin/console server:run 8000, где 8000 - это порт, который он будет слушать.

    Далее просто переходишь в браузер по адресу 127.0.0.1:8000

    Если у тебя последняя версия симфоней, то в неё по умолчанию не включен веб-сервер, подключить ты его можешь командой composer require symfony/web-server-bundle --dev
  • Где есть хорошая документация по Woocommerce?

    @galliard
    Я хочу научиться создавать сайты на Woocommerce

    Ты уверен, что хочешь этого? Одумайся, пока не поздно!
  • Насколько безопасен proc_open?

    @galliard
    DarkKefir, да, пожалуй в мире так много опасностей, что php-функции - это последнее, чего нужно бояться)))
  • Как узнать имя фамилию человека, зашедшего на сайт?

    @galliard
    то это приложение может им делиться

    А может и не делиться. С чего бы ему делиться конфиденциальной информацией?
  • Почему не работает Extending Action Argument Resolving в symfony4?

    @galliard Автор вопроса
    Да, действительно. Мне почему то казалось. что чем меньше - тем приоритетные, оказалось наоборот.

    Избавиться от тегов в конфиге - это конечно хорошо, но в более сложных роутах, типа /users/{userId}/groups/{groupId}/items/{itemId} я бы предпочел полные названия переменных.

    А можно как-то переопределить приоритет дефолтного резольвера? Или вовсе отключить его?
  • Почему не работает Extending Action Argument Resolving в symfony4?

    @galliard Автор вопроса
    BoShurik, сделал новый проект на чистом скелетоне, результат тот же
  • Почему не работает Extending Action Argument Resolving в symfony4?

    @galliard Автор вопроса
    BoShurik, сообщение на тостере ограничено 10к символами, поэтому пришлось извращаться zip'ом, вот https://yadi.sk/d/DntlTQph3VGGmU
  • Что можно учить дополнительно к PHP из бека?

    @galliard
    Евгений, о симфони только быдлокодеры плохо отзываются. Вакансий меньше, да, но зато зряплата там больше.
  • Можно ли заставить doctrine валидировать поля при создании сущности?

    @galliard Автор вопроса
    1. Вы можете реализовать свой гидратор (hydrator). Гидраторы как раз и занимаются созданием сущностей. Только официальной документации по созданию гидраторов нет. Есть это: https://www.doctrine-project.org/projects/doctrine...
    Есть еще старая статья: https://techpunch.co.uk/development/create-custom-...
    И статья про гидраторы от Marco Pivetta: https://ocramius.github.io/blog/doctrine-orm-optim...

    Спасибо. Не знаю, что получится в итоге, но выглядит интересным.

    Хотя я, признаюсь честно, ожидал более простого решения, типа "добавить такую-то аннотацию".

    2. Вы можете подписаться на событие postLoad: https://www.doctrine-project.org/projects/doctrine... и бросать исключение сразу же после создания объекта.

    Мне этот вариант показался слишком грязным, придется в каждом методе описать функцию постлоЛоада. Проблему решит, но не красиво.

    Но, на мой взгляд подобное решение приведет к плохим последствиям т.к. исключение будет бросаться в самых неожиданных местах. Как вы будете его обрабатывать?
    Лучше локализуйте проблему там, где она возникает, бросая исключения в коде, не допускающем null-значений:

    Это как раз то, чего хочется избежать. Уж очень много таких ифов придется по коду размазать. Да и "неожидано" сущности вроде нигде не появляются, их запрос всегда явный.
  • Можно ли заставить doctrine валидировать поля при создании сущности?

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

    Отображать не полный набор данных в моем случае будет не корректно.
  • Можно ли заставить doctrine валидировать поля при создании сущности?

    @galliard Автор вопроса
    Алексей Скобкин, индусы были до меня и будут после меня, наверное они важны для бизнеса, не суть важно. Я действую в ограниченном контексте вверенного мне участка работ.

    В самой же БД они уже должны быть валидны. И ваша проблема не в Doctrine и отсутствии валидации, а в том, что в БД невалидные данные. Бороться надо с этим.

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

    Сделайте в БД поле NOT NULL и пусть индусы не кладут туда его. Или же, если не можете, сделайте сущность, которая может работать с NULL.

    Если бы меня устраивал один из этих вариантов - я бы этот вопрос не задавал. Но я хочу найти третий.
  • Можно ли заставить doctrine валидировать поля при создании сущности?

    @galliard Автор вопроса
    Это ваша задача этого не допускать. Если вы это допустили, ошибки Doctrine - это меньшее, что может вылезти.


    Дык я и не допускаю, проблема в том, что есть ещё команда индусов, которая периодически туда срет, и я никак не могу на это повлиять.

    Ну так может быть стоит привести схему и сущность с маппингом в соответствие друг другу, а не отстреливать симптомы?

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

    Решается это так:
    public function getName(): ?string

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

    Я сначала было хотел вам предложить валидировать данные на входе в сущность (конструктор)

    Я был бы рад, если вы покажете как заставить доктрину использовать конструктор при загрузке данных из БД. Сам я об этом информации не нашел.

    вы вообще используете Doctrine очень странно и ждёте, что сама Doctrine будет вам предоставлять средства для ухода от возникающих проблем.
    Первое и самое важное: Doctrine - это Data Mapper. Если у вас маппинг и сущность не соответствуют схеме - работать ничего нормально не будет. Лечите заболевание, а не симптомы.


    Ну нимагу я этого сделать, это не мой pet-проект, не решаю я такие вопросы. Я могу только купировать эти проблемы в рамках моего микросервиса, что и пытаюсь сделать.