Pull to refresh
-6
0
Иван @kraso4niy

Пользователь

Send message
И да автор, вы настолько не опытны, что даже не поняли почему класс Order не будет работать в доктрине. Для вас специально дополню: doctrine2 построит запрос не экранируя order -> тем самым вы будете получать постоянную ошибку в SQL.
Поэтому к нему важны аннотации. А вот к Project можно опустить аннотации.
Вам сударь пример.
<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
/**
 * Class Order
 * @package App\Entity
 * @ORM\Entity
 */
class UserOrder
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;
    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * Order constructor.
     *
     * @param $name
     */
    public function __construct(string $name)
    {
        $this->name = $name;
    }

    /**
     * @return integer
     */
    public function getId(): int
    {
        return $this->id;
    }

    /**
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }

}

просто акцессоры к свойствам, пускай и дающие какие-то гарантии типа

постыдились бы своих слов.
У вас к Order не указаны аннотации (или любой другой способ задания маппинга), при этом вы используйте его как основной пример, а Project скрывайте, тем самым создаете путаницу.

При этом в Project вы опускайте работу доктрины и ORM паттерна — unitofwork будет следить за полями, и те не заполненные корректно поля вызовут ошибку вставки данных, обновления данных.

То есть конецпция сеттеров и геттеров как раз таки работает на типах, если у вас null вернется в mehod(): string, то вы получайте ошибку, если setter принимает тип, то другой тип вы не сможете туда просетить, сам php уже валидирует за вас данные.
Достаточно написать очень простой тест на объект на set и get и понять что UnitOfWork не будет класть туда null.
То что вы можете где то вызвать setter, а где то его НЕ вызывать, это валидируется внутри схемы через nullable. Мало того, ваше MVC обязано контроллировать входные данные. Ваш запрос должен проходить десериализацию и валидировать еще до того как попадет в слой данных.
Но мы глупые, мы решили опустить MVC, и сразу вводить пользовательские данные в БД.
Но и тут доктрина нас спасает, так как set и get типизированы.
То есть все условия с getter setter выполняются.
Вы же пишите
Тут у нас есть ряд not nullable полей — указаны как явно в аннотации и без указания (по умолчанию false). Вы точно на ревью увидите, что при создании объекта и наполнении его полями — все сеттеры на not nullable были вызваны, а тесты содержат все кейсы проверок? :)
Куда лучше бы было, если бы можно было создать объект одним методом — конструктором или именованным конструктором (например статическим методом). В них был бы четко заложены зависимости и инкапсулировано необходимое для создания объекта поведение.


UnitOfWork вам не даст воткнуть not nullable, как и схема в БД если при создании миграции разработчик целенаправлено не изменил схему, оставив ее в маппинге. При этом даже в этой ситуации unitofwork проверит в setter и если там придет null, он заругается.

При этом вам также никто не мешает создавать объект одним методом: через конструктор, больше, а сеттеры убирайте. У вас останутся только приватные свойства которые вы будете сетить в конструкторе.
Выше уже рекомендовали видео Marco Pivetta (Doctrine), прошу посмотреть:
youtu.be/WW2qPKukoZY?t=962

Это мой ответный «совет» :) Без обид :)

Посмотрел, и не понял причем тут ваша статья и лучшие практики в доктрине.
Ваша статья по примерам кода также никак не относится не к symfony, ни к doctrine.
У вас в примерах даже нет аннотации к классам сущностей.
Например Order у вас просто PPO, без определения мета информации.
Order класс не будет работать в доктрине.
Название вашей статьи противоречит свойствам языка PHP (публичные геттеры и сеттеры являются неотъемлемой частью сокрытия данных и реализации).

Документация даёт самые простые примеры, чтобы в API библиотеки или фреймворка можно было быстрее въехать

Вы явно не читали документацию.

У основного автора доктрины есть претензии к документации симфони по использованию доктрины.

Как это относится к статье? Вы сами прочитайте что пишите, «претензии к документации», а что в статье??!
Статья и видео — это два разных материала. Мы обсуждаем статью автора.
Тоже самое про статью от Marco, там никакого отношения нет к материалу автора.
Там описываются совершенно другие проблемы.
1. Статья не относится к symfony
2. Статья вводит в заблуждение новичков.
3. Статья «ниочем»

Автору желаю скорейшего просветления и рекомендую к прочтению книги Мэтт Зэнсдтра PHP Объекты и шаблоны, документацию по doctrine2, документацию по symfony 4+.
Без обид.
и нужно было спокойно похоронить плагин и заниматься своими делами

и похоронить wordpress и забыть что он существует и попросить всех остальных это сделать
А как же баннер kfc или всплывающий баннер яндекс браузера наезжающий на новости, с таким полем ввода баннеры будут не видны(((
Видимо все что мог сделать автор с этими украдеными данными, это прикинуться на время трампом в твиттере))
Но использование стандарта iCalendar было одной из основных целей написания этой библиотеки. Он гораздо более гибкий и используется повсеместно для подобных целей.

В статье так не написано. Русский язык тоже гибкий. И crontab тоже. Вашу задачу (много задач в crontab) теперь придется поддерживать, если вдруг надо поменять расписание запуска какого либо скрипта, нужно деплоить код, в который программист вася обязательно нагадит с обратной совместимостью: ), а если проект растет по настоящему, то 1им сервером не обойтись и нужно все это запустить на 3-10 серверах… а еще рестарт крона будет накапливать задержки, вообщем ждите беды и готовьтесь к худшему.
А если не хотите беды и хотите пить кофе, то сделайте демона, и натравите на него супервизор.
мне кажется или я попал на форум геймдев.ру
Удобна профессия и никакой ответственности.
Еще технический эксперт по готовому ТЗ 2х летней давности возьмет все и сделает и пофиг что там кому нужно и как…
А потом системный интегратор запустит ночных инженеров чтобы те исправили ошибки предыдущих. И так по кругу… а люди будут стоять в живой очереди потому что в автомат выдачи талонов сломался, а обслуживать его некому так как инженеры спят, а системные артефакторы на это не способны.
Все верно.
Это как водить автомобиль по книгам.
Попадаешь за руль и оказывается правила никто не соблюдает, а там где установлен знак главной, уже не главная…
Теорию знать надо, но для старта достаточно базовых знаний информатики + подход «пишу с нуля, но подглядываю в чужой код». Теория не дает практики чтения чужого кода, его улучшения и т.п.
Теория дает лишь уверенность что ты способен это понять.
По поводу облаков.
Как только более менее серьезная компания становится и за облака надо уже так не хило приплачивать, коробка наше все. Один раз настроил и живи спокойно. Да еще и без багов все будет работать и стабильно, а не так что пришел а у тебя уже все по другому, а тебя не спрашивали…
Возможно вы ошиблись статьей и коммент адресован в какую то другую вкладку в вашем старом добром браузере.
Для тех кто читает только комменты: в статье речь идет о инструментах для разработки и поддержки.
Автору советую почитать php.net/manual/ru/pdostatement.execute.php и советую использовать возможности языка.
Если есть возможность то использовать doctrine2
В doctrine есть sql logger из коробки.
www.doctrine-project.org/api/dbal/2.4/class-Doctrine.DBAL.Logging.EchoSQLLogger.html
К тому же в доктрине довольно просто реализовать свой логгер.
Ну и на sql сервере можно включить query log что очень полезно в dev режиме.
А так во времена php4 ваше решение было бы норм.
За статью спасибо!
Теперь я понимаю смысл этих конкурсов!
Было желание участвовать, но времени не было.
Работодатель ничего не нарушил.
В приглашении на работу xored сказано: оформление визы 30 дней.
Автор пишет:
на время оформления визы буду оформлен в новосибирский офис.

Далее логическая цепочка рушится.
Собрал вещи, переехал в Прагу, по туристической визе, за некоторое время до начала работы

Я боюсь представить как автор читает чужой код.
И почему все в один голос обвиняют xored.
Можно из любого оффера сделать такую историю и подменить понятия.
Не согласен с вами.
Трейт это те же mixin, тоже самое свойство и тоже самое наследование. Если ваша декомпозиция использует наследование, то трейты тут не могут быть причиной неверной декомпозиции: )
В поддержку уии скажу что 1.x версии были хороши.
Но уже тогда было понятно что нужно знать и yii и sf: )
И ждать кто же победит.
Для меня и многих компаний победил сенсиолабс и его компоненты.
Сейчас если вы не способны собрать свой yii2 за 2 дня, то пожалуй вам нужно использовать этот фреймворк.
Для остальных есть composer: )
Как в том же fos user bundle я переопределю шаблоны, если мой бандл унаследован, а папка для всех общая. Только переписыванием контроллеров?

Information

Rating
Does not participate
Location
Сочи, Краснодарский край, Россия
Date of birth
Registered
Activity