Создание веб-приложения в Laravel, которое будет клонировано в несколько отдельных экземпляров. Я понимаю, что в файле .env можно указать переменные, специфичные для приложения, поэтому, например, если у приложения была ставка комиссии, применимая к определенным вычислениям, выполняемым в нем, можно было указать один коэффициент конверсии в. env для одной установки и другой для другой установки.
Однако мой вопрос: как лучше всего это сделать с помощью функций, специфичных для среды? Итак, если бы в каждой установке был свой способ расчета комиссии, как лучше всего было бы создать приложение, чтобы оно работало для всех, но тогда нужно отказаться от метода расчета комиссии для этого приложения, зависящего от конкретной установки. ?






Вы можете добавить переменную CALCULATION_METHOD в свой файл .env.. Вы можете прочитать это значение в своем методе вычисления и позволить логике зависеть от этого.
Каждая часть "специфической для установки" конфигурации должна храниться в файле .env.
Я предлагаю по-прежнему использовать переменные, специфичные для среды, но писать свои реализации функций вокруг этих переменных. В вашем примере у вас могут быть разные ставки комиссии и несколько методов расчета комиссии. У вас может быть переменная, которая определяет, какой метод использовать, например:
class CommissionCalculator
{
public function calculate()
{
$method = config('commission.method');
$rate = config('commission.rate');
if (method_exists($this, $method)) {
return $this->$method($rate);
}
// throw an exception
}
public function method1($rate)
{
// Implement method1
}
}
config / Commission.php
return [
'rate' => env('COMMISSION_RATE'),
'method' => env('COMMISSION_METHOD')
];
.env
COMMISSION_RATE=1
COMMISSION_METHOD=method1
Вы можете добавить базовое значение в файл env и загрузить базовое значение в файл конфигурации и добавить код для переопределения этого параметра конфигурации в методе загрузки appserviceprovider.php.
Логика заключается в том, что при загрузке приложения оно проверяет условие из базы данных и, если оно выполнено, переопределяет значение конфигурации, что означает, что ваш расчет изменился автоматически.
Спасибо. Я думаю, что все ответы сводятся к тому, что невозможно иметь чистый метод в конфигурации среды, но это был лучший ответ (особенно комбинация хранения имени метода и использования method_exists, которую я не рассматривал).