add forced domain
This commit is contained in:
parent
377abaedc3
commit
8e016e3b36
|
@ -39,6 +39,11 @@ class Navigation implements EntityInterface
|
||||||
*/
|
*/
|
||||||
protected $domain;
|
protected $domain;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ORM\Column(type="boolean", options={"default"=0})
|
||||||
|
*/
|
||||||
|
protected $forceDomain = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ORM\Column(type="text", nullable=true)
|
* @ORM\Column(type="text", nullable=true)
|
||||||
*/
|
*/
|
||||||
|
@ -100,6 +105,18 @@ class Navigation implements EntityInterface
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getForceDomain(): ?bool
|
||||||
|
{
|
||||||
|
return $this->forceDomain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setForceDomain(bool $forceDomain): self
|
||||||
|
{
|
||||||
|
$this->forceDomain = $forceDomain;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
public function getAdditionalDomains(): array
|
public function getAdditionalDomains(): array
|
||||||
{
|
{
|
||||||
return (array) json_decode($this->additionalDomains, true);
|
return (array) json_decode($this->additionalDomains, true);
|
||||||
|
|
49
core/EventSuscriber/Site/ForcedDomainEventSubscriber.php
Normal file
49
core/EventSuscriber/Site/ForcedDomainEventSubscriber.php
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Core\EventSuscriber\Site;
|
||||||
|
|
||||||
|
use App\Core\Site\SiteRequest;
|
||||||
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
|
use Symfony\Component\HttpKernel\Event\ResponseEvent;
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use function Symfony\Component\String\u;
|
||||||
|
|
||||||
|
class ForcedDomainEventSubscriber implements EventSubscriberInterface
|
||||||
|
{
|
||||||
|
protected SiteRequest $siteRequest;
|
||||||
|
|
||||||
|
public function __construct(SiteRequest $siteRequest)
|
||||||
|
{
|
||||||
|
$this->siteRequest = $siteRequest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function onKernelResponse(ResponseEvent $event)
|
||||||
|
{
|
||||||
|
$navigation = $this->siteRequest->getNavigation();
|
||||||
|
|
||||||
|
if (!$navigation) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($navigation->getDomain() === $this->siteRequest->getDomain()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$uri = u($this->siteRequest->getUri())
|
||||||
|
->replace(
|
||||||
|
'://'.$this->siteRequest->getDomain(),
|
||||||
|
'://'.$navigation->getDomain()
|
||||||
|
);
|
||||||
|
|
||||||
|
$event->getResponse()->headers->set('Location', $uri);
|
||||||
|
$event->getResponse()->setStatusCode(Response::HTTP_MOVED_PERMANENTLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getSubscribedEvents()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
KernelEvents::RESPONSE => [['onKernelResponse', 20]],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ use Symfony\Component\Validator\Constraints\Length;
|
||||||
use Symfony\Component\Validator\Constraints\NotBlank;
|
use Symfony\Component\Validator\Constraints\NotBlank;
|
||||||
use App\Core\Form\Site\NavigationAdditionalDomainType;
|
use App\Core\Form\Site\NavigationAdditionalDomainType;
|
||||||
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
|
||||||
|
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
|
||||||
|
|
||||||
class NavigationType extends AbstractType
|
class NavigationType extends AbstractType
|
||||||
{
|
{
|
||||||
|
@ -58,6 +59,19 @@ class NavigationType extends AbstractType
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$builder->add(
|
||||||
|
'forceDomain',
|
||||||
|
CheckboxType::class,
|
||||||
|
[
|
||||||
|
'label' => 'Force this domain',
|
||||||
|
'required' => false,
|
||||||
|
'attr' => [
|
||||||
|
],
|
||||||
|
'constraints' => [
|
||||||
|
],
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
$builder->add(
|
$builder->add(
|
||||||
'additionalDomains',
|
'additionalDomains',
|
||||||
CollectionType::class,
|
CollectionType::class,
|
||||||
|
|
|
@ -148,5 +148,6 @@
|
||||||
"Setting": "Paramètre"
|
"Setting": "Paramètre"
|
||||||
"Section": "Section"
|
"Section": "Section"
|
||||||
"Filter": "Filtrer"
|
"Filter": "Filtrer"
|
||||||
|
"Force this domain": "Forcer ce nom de domaine"
|
||||||
"Additional domains": "Domaines additionnels"
|
"Additional domains": "Domaines additionnels"
|
||||||
"Regular expression: do not add the delimiter": "Expréssion régulière : ne pas ajouter de délimiteur"
|
"Regular expression: do not add the delimiter": "Expréssion régulière : ne pas ajouter de délimiteur"
|
||||||
|
|
|
@ -10,6 +10,9 @@
|
||||||
<div class="col-12">
|
<div class="col-12">
|
||||||
{{ form_row(form.domain) }}
|
{{ form_row(form.domain) }}
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-12">
|
||||||
|
{{ form_row(form.forceDomain) }}
|
||||||
|
</div>
|
||||||
|
|
||||||
{% set collection_name = 'additional-domains' %}
|
{% set collection_name = 'additional-domains' %}
|
||||||
{% set label_add = 'Add' %}
|
{% set label_add = 'Add' %}
|
||||||
|
|
|
@ -71,4 +71,9 @@ class SiteRequest
|
||||||
{
|
{
|
||||||
return $this->requestStack->getCurrentRequest()->headers->get('host');
|
return $this->requestStack->getCurrentRequest()->headers->get('host');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getUri(): string
|
||||||
|
{
|
||||||
|
return $this->requestStack->getCurrentRequest()->getUri();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue