У меня есть форма, которая связана с контроллером, и моя цель - сохранить данные в моем пользовательском vendor_module_table.
Я наткнулся на несколько сообщений в Интернете о том, как это сделать. Моя проблема с предоставленными решениями заключается в том, что все они используют менеджер объекта - и мне это кажется плохой практикой. Особенно, когда M2 основан на Symfony, где я могу просто вызвать предварительно созданную функцию сохранения / добавления к моему контроллеру, относящуюся к моей форме, и она просто работает ... Magento2 приспособил что-то для этого?
public function execute()
{
$post = (array) $this->getRequest()->getPost();
if (!empty($post)) {
$customerId = $post['customer_id'];
$make = $post['make_id'];
$model = $post['model_id'];
$year = $post['year_id'];
# to do - add insert
$this->messageManager->addSuccessMessage('Success!');
$resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$resultRedirect->setUrl('/module/controller/add');
return $resultRedirect;
}
$this->_view->loadLayout();
$this->_view->renderLayout();
}
Например. код из моего проекта Symfony:
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
# set non-form fields
$category->setApproved(0);
$category->setCreatedTs(new \DateTime());
try {
# this is how Symfony saves data to a table
$em->persist($category);
$em->flush();
$this->addFlash('success', 'Category Submitted for Review.');
} catch (Exception $e) {
$this->addFlash('danger', 'Something went skew-if. Please try again.'. $e->getMessage(). '- ' .$e->getCode());
}
return $this->redirectToRoute('category_list');
}
Я прошел через документы и нашел это, но у него нет четкого примера того, как реализовать. Я наткнулся на несколько сообщений на Magento SE, и мне посоветовали не использовать из-за того, что это неполная функция. Каковы альтернативы / правильный способ сделать это?
@ A.L да, это, вероятно, лучший способ сделать это, в настоящее время используется _objectManager, и он, кажется, имитирует некоторое поведение ORM, но ... во многих сообщениях говорится, что это плохая практика и т. д. Я так запутался с сообществом M2 xD
@treyBake с использованием ORM считается плохой практикой при высокой производительности / высокой нагрузке / трудно кэшируемых действиях, потому что это дает вам больше уровней абстракции, которые отлично подходят для производительности, но плохо для аспекта производительности. Мои вопросы: а) вы хотите вообще использовать Doctrine (ORM)? Если да, возможно, посмотрите DBAL. Б) Ваша проблема больше связана с производительностью или передовыми методами повышения производительности?




Вероятно, вы могли бы использовать необработанный SQL или DQL-запрос для добавления данных без использования ORM.