Функция переключается в Symfony

Наше приложение Symfony в настоящее время является одним из приложений, которое в скором времени потребует возможности иметь несколько сайтов на одном и том же ядре Symfony и иметь несколько другие функции, основанные на том, на каком сайте он находится в настоящее время.

В качестве примера у нас может быть баннер, показывающий на одном сайте, но не другой. Другим примером является опция оплаты, которая будет включена/отключена на разных сайтах. Или другой - это разные поля в форме на разных сайтах.

У кого-нибудь есть опыт структурирования приложения Symfony таким образом?

Ответ 1

Если вы хотите "тему" ​​вашего приложения, вы можете использовать LiipThemeBundle, это действительно хорошо работает. Для активации/деактивации функций у вас также есть пакет FeatureToggleBundle (тихое недавнее).

Вы также можете реализовать базовый помощник:

/**
 * Check if a feature is activated.
 *
 * @param string $feature Name of the feature
 *
 * @throws AccessDeniedHttpException
 */
protected function checkFeature($feature)
{
    $features = $this->container->getParameter('app.features')
    if (!$features[$feature]) {
        throw new AccessDeniedHttpException();
    }
}

...

$this->checkFeature('contact_form');

При такой конфигурации:

app.features:
    contact_form: false

Ответ 2

Вы должны знать, что с помощью прослушивателя событий ядра вы можете выполнять большую часть работы.

Вы можете в "CoreBundle", например, ссылаться на пользователя на другой шаблон в зависимости от имени домена, где он находится, используя событие kernel.request.

Итак, в вашей ситуации для сайта было бы легко показать баннер на сайте, но не другой.

Вы можете посмотреть эту статью, которая объясняет это:

Twig templating с помощью прослушивателя событий

Ответ 3

Yess - это преимущество symfony

enter image description here

Symfony использует ядро, связанное с маршрутизацией и контроллером, и затем создается ответ.

Если вы хотите использовать несколько приложений в symfony, вы можете сделать это очень легко, и это преимущество symfony. Для этого вам просто нужно добавить некоторую маршрутизацию, и все будет сделано автоматически.

Вы можете использовать класс формы symfony для добавления форм и добавления их на другие страницы с обязательным полем без повторного создания всей формы. Если вы хотите добавить или удалить некоторые функции вкл/выкл, вы можете просто сделать это с помощью класса app или путем создания разных контроллеров.