Ответы пользователя по тегу Yii
  • Как связать 2 сущности?

    sggr
    @sggr
    PHP, Ruby, GO
    PS: Я не хочу как-то закидать Yii какахами, поэтому подчеркиваю - нужно выбирать инструмент реализации исходя из потребностей.

    Вы не сможете полноценно применять DDD в Yii. Потому что Yii не способен на это =) (способен, но нужно допиливать).

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

    При использовании DDD вам просто необходимы конструкторы, объект не может быть создан если не указаны все его параметры. И за это должен отвечать не какой-то там валидатор или база или сеттеры, за это должен отвечать конструктор!

    Объект предметной области не может маппиться на базу внутри этого объекта - это уже часть реализации. Это нарушает букву S в такой штуке как SOLID =)

    В Yii по факту не получится разбить приложение на слои Domain layer, Persistance Layer, Application (Service) Layer, View Layer. Из за модульной архитектуры. Можно допилить, но зачем?

    Нужно отказываться от Active Record полностью, ставить доктрину или писать свои мапперы в Persistance Layer, что геморойно.

    Ну и вывод:
    Вообще Yii сам по себе очень простой фреймворк для простых задач, для прототипирования, для приложений с коротким циклом поддержки, в котором использование ERP практик из коробки невозможно. При этом я не отрицаю, что на нем можно написать большое приложение и может быть (здесь я не уверен), вы сможете его поддерживать долгое время. Сильная связанность всех компонентов, ActiveRecord, убогий DI контейнер (может что-то поменялось, но в 1ых версиях Yii2 он был реально убогий) и тдтп. Почитайте про объектно-ориентированный дизайн, про SOLID, вникните и еще раз взгляните на свой код на Yii. И если вам реально необходим DDD, посмотрите на более подходящие решения - Symfony, Zend.

    По конкретно вашей задаче нужно больше информации. Что за манипуляции вы хотите с ними производить, насколько пользователи отличаются друг от друга, сами объекты, являются ли они наследниками по принципу Liskov. Что за код, который может работать и с тем и с другим. Зависит ли этот код от реализации или он использует только объекты предметной области.
    Ответ написан
  • Как сделать добавление записи и её обновление в одной форме?

    sggr
    @sggr
    PHP, Ruby, GO
    Создаете\находите модель в контроллере
    Передаете модель во create\update view, в зависимости от action
    В create\update view, используете echo $this->renderPartial('_form', array('model'=>$model)), передавая модель во вьюшку формы
    Во вьюшке формы должен находится сам код формы, работающий с моделью + определенная простая логика отображения, в зависимости от того новая это сущность или уже существующая. Например, название кнопки $model->isNewRecord ? 'Create' : 'Save'
    Ответ написан