У меня довольно теоретический вопрос о правильном подходе к использованию Symfony, хотя я считаю, что подход должен быть таким же для любой другой среды PHP.
У меня есть тарифные объекты, хранящиеся в базе данных. Я хочу предоставить модель затрат для каждого тарифа на основе пользовательского ввода.
Мой первоначальный подход заключался в создании массива, каждый элемент которого содержал бы данные из соответствующего тарифного объекта и рассчитанные данные. Все это было сделано в методе действия контроллера.
Позже я создал другой класс CostModel, а затем создал массив CostModel [], который был передан в метод $ this-> render (). Опять же это сделано в контроллере.
Этот подход работает достаточно хорошо. Однако, поскольку у меня мало опыта работы с Symfony, я сомневаюсь, что этот подход — выполнение вычислений в контроллере — является хорошим.
Есть ли лучший способ для этого?
Ну, ваш вопрос может иметь более одного ответа, так как он основан на мнении.
Что я могу сказать без сомнений по поводу кода контроллера, так это то, что чем меньше, тем лучше. Почему я это сказал? Поскольку код контроллера не может использоваться повторно, поскольку контроллеры создаются для «подключенных» представлений и бизнес-логики (обратите внимание: подключайте, а не инкапсулируйте), и общее правило, которому я следую при разработке с Symfony2, заключается в записи в контроллер строк кода для «объектов», которые напрямую доступны из контроллера (форма, запрос, представления и т. д.); весь код, который не связан с этими понятиями, должен быть перенесен в другое место.
Ваше решение является хорошей отправной точкой, но мы не можем судить, поскольку у нас нет более подробной информации и мы не знаем архитектуру вашего программного обеспечения. Что я могу сказать — и я надеюсь, что вы уже знаете — это то, что вы можете перейти к визуализации (то есть для просмотра системы шаблонов; я полагаю, вы используете ветку) непосредственно к ArrayCollection, которую вы получили, запрашивая базу данных (так что в основном вы этого не делаете нужен массив CostModel []). Так что, может быть, ваш подход хорош, но не самый лучший: возможно, вы можете воспользоваться преимуществами хранилища, написать хороший запрос, который может извлекать и рассчитывать данные для вас (более оптимизированным способом) и использовать хранилище непосредственно в контроллере. Таким образом, вы могли бы одновременно перенести код туда, где он должен остаться, написать меньше строк кода, сделать некоторую оптимизацию (или лучше, пусть Doctrine сделает для вас), и вам не нужно создавать новый класс (модель). ).
Других решений пока нет …