форма symfony только с методами-получателями в сущности

1

Я хочу создать формы с использованием только методов getter в объекте... Так как я работаю над уже существующей базой данных, которая не требует хранения или манипулирования данными.

Следовательно, я создал объекты для продуктов только с методами Getter и без метода Setter.

Однако, когда я создаю форму (например, поисковый запрос с некоторыми выпадающими списками и т.д.), Он всегда ищет методы set или Add. Есть ли возможность, если я могу использовать только геттеры для получения данных из базы данных.

И я не хочу, чтобы данные были изменены в любое время в будущем.

я попытался с "read_only", но он все еще дает ошибку об установщике и addMethod()

http://symfony.com/doc/current/reference/forms/types/form.html#read-only

РЕДАКТИРОВАТЬ:

Я хочу создать раскрывающийся список ProductGroupcategory-> productSubcategory → Продукт

например (предварительный поиск): http://www.buycarspares.co.uk/

Полный код:

https://gist.github.com/anonymous/8b2e576e69b1588e4f21

  • 0
    Что ж, если вы создаете форму и она возвращает что-либо, эти изменения необходимо сохранить «где-то», поэтому она пытается «установить» или «добавить» свойства. Возможно, эти изменения могут быть сохранены в поле, которое не «сопоставлено» с каким-либо свойством объекта, таким образом, вам не понадобится установщик
  • 0
    наткнулся на эту статью allwrightythen.com/ddd-with-symfony-forms даст ему попробовать и посмотреть, как это происходит, однако мне также нужно сделать построитель запросов
Показать ещё 3 комментария
Теги:
forms

2 ответа

0

Да, вы можете, хотя некоторые люди могут считать решение хуже, чем проблема. Конечно, вы можете просто объявить свойства своей сущности общедоступными. Это позволит избежать не только сеттеров, но и геттеров. Функция Doctrine 2 lazy loading не будет работать.

Более продвинутый подход заключается в понимании того, что компонент формы использует объект доступа к объекту для передачи данных в и из вашего объекта. Именно там появляются сообщения "добавить" и "установить". Объекты доступа к объектам также позволяют использовать массивы, а также объекты. http://symfony.com/doc/current/components/property_access/introduction.html

Компонент формы позволяет подключить свой собственный объект доступа к объекту, что означает, что вы можете создать свой собственный объект доступа, который может напрямую записываться в частные/защищенные переменные с помощью Reflection. Это, кстати, та же техника, что и Doctrine 2 для гидратации ваших сущностей с использованием информации о базе данных.

Конечно, я уже слышу вопль протеста этого подхода в основном о нарушении инкапсуляции. Но подумайте об этом на мгновение перед голосованием. Компонент формы действительно просто сохраняется и возвращает состояние объекта в и из html-документа. Именно то, что делает Доктрина 2. Пока вы не злоупотребляете техникой, тогда нет нарушения.

Я обычно использую этот подход, чтобы не писать бесконечные геттеры и сеттеры. Кажется, на практике работает нормально.

  • 0
    Спасибо за понимание, которое я в конечном итоге использовал: whitewashing.de/2012/08/22/… и allwrightythen.com/ddd-with-symfony-forms, однако я добавил слишком много строк кода, так как отделил форму от сущность и я вижу некоторое время выполнения. Может быть, я вернусь к стандартному получателю / установщикам не уверен
  • 0
    Ага. Одна проблема с более «чистыми» подходами состоит в том, что они могут добавить изрядное количество кода, не добавляя значительную ценность для типичного приложения запроса / ответа.
0

Отношения требуют add- и get-методы просто потому, что речь идет о массиве или массивеCollection объекта, а не о геттерах или сеттерах для обычных свойств сущности, таких как строки.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню