Допустим у нас есть 2 очень похожих по содержанию экшена контроллера, разница только в названии view. Каким образом принято в mvc фреймворках выносить общий код? Есть ли такие понятия, типа ControllerHelpers или подобное? Или же просто выделать Namespace типа
HTTP -> Controllers
HTTP -> ControllerHelpers
И каждый класс хелпера - это просто класс, который содержит в себе методы, которые мы потом вызываем в контроллере?
Например такой метод:
public function ololoAction()
{
$form_data = $this->request->getJsonRawBody(true);
(new OloloValidation())->assert($form_data);
$id_variable = 'policy_id';
$token_variable = 'object_token';
$per_page_variable = 'per_page';
$query_string = (new JuridicalDmsStructures('alias', [$id_variable => 'Long!', $token_variable => 'String!', $per_page_variable => 'Long!']))
->addStructure($id_variable, $token_variable, false, $per_page_variable)
->build();
$query = [
'query' => $query_string,
'variables' => [
$id_variable => $policy_id,
$token_variable => $object_token,
$per_page_variable => 1
]
];
$result = (new Request())->post('', soglasie_gql_request_options(), $query);
$contract_data = Fractal::create()
->item($result['data']['data']['policy'], OloloTransformer::class)
->serializeWith(WithoutDataKeySerializer::class)
->toArray();
if(!isset($contract_data['manager']['work_email'])){
throw new UserableException($this->t->_('mailer.failed_to_get_manager_email'));
}
// Отправляем на почту
/** @var \Phalcon\Mailer\Manager $mailer */
$mailer = $this->di->getShared('mailer');
$mail = $mailer->createMessageFromView(
'view_path',
['form_data' => $form_data, 'contract_data' => $contract_data]
)
->to($contract_data['manager']['work_email'])
->subject($this->t->_('mailer.juridical_dms_add_insured_theme'));
$count = $mail->send();
$this->logger->log(
Logger::INFO,
"Отправка письма\n"
. "Текст письма: {content}\n"
. "Email: {curator_email}\n"
. "Кол-во отправленных писем: {status}\n",
[
'content' => $mail->getContent(),
'curator_email' => $contract_data['manager']['work_email'],
'status' => $count
]
);
if (!$count) {
throw new UserableException($this->t->_('mailer.failed_to_send_email'));
}
}
И, допустим, нужно сделать такой же экшен, только заменить путь до вьюхи письма view_path. Не копипастить же