Функция переключается в 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
или путем создания разных контроллеров.