Skip to content

Instantly share code, notes, and snippets.

@bryan-txg
Created January 22, 2026 00:52
Show Gist options
  • Select an option

  • Save bryan-txg/478c163d469070e9e93e491dd59055ba to your computer and use it in GitHub Desktop.

Select an option

Save bryan-txg/478c163d469070e9e93e491dd59055ba to your computer and use it in GitHub Desktop.
Code sample
/**
* На сайте есть форма-"калькулятор", расчитывающая стоимость доставки груза самолетом в зависимости от разных параметров.
* Данные, отправляемые этой формой - это по сути созданная посетителем сайта предварительная заявка на авиа-доставку.
* Метод send в классе CalcAviaController, принимает данные из этой формы и отправляет их либо в CRM Битрикс24
* в раздел "Лиды", либо в телеграм ответственного за обработку заявок с сайта менеджера, либо на его имейл.
* Каждый вариант реализован в виде отдельной стратегии. Выбор текущей стратегии забинден в провайдере (класс BindingsProvider).
*/
class BindingsProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(LeadSubmissionStrategyInterface::class, EmailSubmissionStrategy::class);
}
}
interface LeadSubmissionStrategyInterface
{
public function submit(CalcAviaCalculation $calculation, string $text): void;
}
/**
* Отправляет расчет из калькулятора авиаперевозок на имейл менеджера
*/
class EmailSubmissionStrategy implements LeadSubmissionStrategyInterface
{
public function submit(CalcAviaCalculation $calculation, string $text): void
{
SendMailJob::dispatch(
'Запрос с сайта – Калькулятор «Авиа»',
$text
)->onQueue('mail_queue');
}
}
/**
* Отправляет расчет из калькулятора авиаперевозок в битрикс 24 в раздел "лиды"
*/
class Bitrix24SubmissionStrategy implements LeadSubmissionStrategyInterface
{
public function submit(CalcAviaCalculation $calculation, string $text): void
{
SendBitrixLeadJob::dispatch(
$calculation,
$text
)->onQueue('bitrix24_queue');
}
}
/**
* Отправляет расчет из калькулятора авиаперевозок в телеграм менеджера
*/
class TelegramSubmissionStrategy implements LeadSubmissionStrategyInterface
{
public function submit(CalcAviaCalculation $calculation, string $text): void
{
SendTelegramJob::dispatch(
$calculation,
$text
)->onQueue('telegram_queue');
}
}
/**
* Методы, относящиеся к калькулятору авиаперевозок
*/
class CalcAviaController
{
/**
* Обработчик для Route::post('/calcs/avia/send'
* Отправляет расчет калькулятора менеджерам через забинденную в провайдере стратегию
*/
public function send(Request $request, LeadSubmissionStrategyInterface $submissionStrategy): JsonResponse
{
$request->validate([
'calculation_id' => ['required', 'exists:calc_avia_calculations,id'],
]);
$data = $request->all();
$calculation = CalcAviaCalculation::findOrFail($data['calculation_id']);
$calculation->update([
'request_name' => $data['request_name'] ?? null,
'request_phone' => $data['request_phone'] ?? null,
'request_email' => $data['request_email'] ?? null,
]);
$text = $this->prepareMainText($calculation);
// Отправка расчета
$submissionStrategy->submit($calculation, $text);
return response()->json([], 200);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment