feat(Controller/composer): Ajoute robots.txt et modifie les routes de réservation.
```
This commit is contained in:
Serreau Jovann
2026-01-20 11:20:28 +01:00
parent efcf2e955c
commit 14aa985aad
5 changed files with 93 additions and 47 deletions

View File

@@ -19,6 +19,7 @@
"docusealco/docuseal-php": "^1.0.5",
"endroid/qr-code": "^6.0.9",
"exbil/mailcow-php-api": ">=0.15.0",
"fkrzski/robots-txt": "^2.0",
"fpdf/fpdf": "^1.86",
"google/apiclient": "^2.19.0",
"google/cloud": "^0.296.0",

67
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "4d8f04690344698e5031e5b37786c9f9",
"content-hash": "27d6dc80377aad07d8d0daeb45496c8e",
"packages": [
{
"name": "async-aws/core",
@@ -2410,6 +2410,71 @@
},
"time": "2025-04-09T20:32:01+00:00"
},
{
"name": "fkrzski/robots-txt",
"version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/fkrzski/robots-txt.git",
"reference": "da2468b1a6ce2901c0a08fc0b4163c4e47128957"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/fkrzski/robots-txt/zipball/da2468b1a6ce2901c0a08fc0b4163c4e47128957",
"reference": "da2468b1a6ce2901c0a08fc0b4163c4e47128957",
"shasum": ""
},
"require": {
"php": "^8.3"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.0",
"pestphp/pest": "^3.3",
"pestphp/pest-plugin-type-coverage": "^3.2",
"phpstan/phpstan": "^1.0",
"rector/rector": "^1.0",
"vimeo/psalm": "^6.0@dev"
},
"type": "library",
"autoload": {
"psr-4": {
"Fkrzski\\RobotsTxt\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "fkrzski",
"email": "filip.krzyzanowski@protonmail.com",
"homepage": "https://github.com/fkrzski",
"role": "Developer"
}
],
"description": "A modern, fluent PHP package for managing robots.txt rules with type safety and great developer experience",
"keywords": [
"crawler",
"php8",
"robots",
"robots.txt",
"seo",
"web-crawler"
],
"support": {
"email": "filip.krzyzanowski@protonmail.com",
"issues": "https://github.com/fkrzski/robots-txt/issues",
"source": "https://github.com/fkrzski/robots-txt"
},
"funding": [
{
"url": "https://github.com/sponsors/fkrzski",
"type": "github"
}
],
"time": "2025-08-20T18:35:48+00:00"
},
{
"name": "fpdf/fpdf",
"version": "1.86.1",

View File

@@ -10,6 +10,7 @@ use App\Logger\AppLogger;
use App\Service\ResetPassword\Event\ResetPasswordConfirmEvent;
use App\Service\ResetPassword\Event\ResetPasswordEvent;
use Doctrine\ORM\EntityManagerInterface;
use Fkrzski\RobotsTxt\RobotsTxt;
use KnpU\OAuth2ClientBundle\Client\ClientRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
@@ -25,42 +26,56 @@ use Symfony\Contracts\HttpClient\HttpClientInterface;
class ReserverController extends AbstractController
{
#[Route('/revervation', name: 'revervation')]
#[Route('/robots.txt', name: 'robots_txt', defaults: ['_format' => 'txt'])]
public function index(Request $request): Response
{
$robots = new RobotsTxt();
$robots->disallow('/signature');
$robots->disallow('/payment');
$robots->crawlDelay(60);
$robots->allow('/reservation');
$robots->sitemap($request->getSchemeAndHttpHost().$this->generateUrl('PrestaSitemapBundle_index',['_format' => 'xml']));
return new Response($robots->toString(),Response::HTTP_OK,[
'Content-Type' => 'text/plain'
]);
}
#[Route('/reservation', name: 'revervation')]
public function revervation()
{
return $this->render('revervation/home.twig');
}
#[Route('/revervation/contact', name: 'revervation_contact')]
#[Route('/reservation/contact', name: 'revervation_contact')]
public function revervationContact()
{
return $this->render('revervation/home.twig');
}
#[Route('/revervation/recherche', name: 'reservation_search')]
#[Route('/reservation/recherche', name: 'reservation_search')]
public function recherche()
{
}
#[Route('/revervation/mentions-legal', name: 'revervation_mentions-legal')]
#[Route('/reservation/mentions-legal', name: 'revervation_mentions-legal')]
public function revervationLegal()
{
return $this->render('revervation/legal.twig');
}
#[Route('/revervation/rgpd', name: 'revervation_rgpd')]
#[Route('/reservation/rgpd', name: 'revervation_rgpd')]
public function revervationRgpd()
{
return $this->render('revervation/rgpd.twig');
}
#[Route('/revervation/cookies', name: 'revervation_cookies')]
#[Route('/reservation/cookies', name: 'revervation_cookies')]
public function revervationCookies()
{
return $this->render('revervation/cookies.twig');
}
#[Route('/revervation/cgv', name: 'revervation_cgv')]
#[Route('/reservation/cgv', name: 'revervation_cgv')]
public function revervationCgv()
{
return $this->render('revervation/cgv.twig');
}
#[Route('/revervation/hosting', name: 'revervation_hosting')]
#[Route('/reservation/hosting', name: 'revervation_hosting')]
public function revervationHosting()
{
return $this->render('revervation/hosting.twig');

View File

@@ -108,6 +108,7 @@
{# Menu Desktop #}
<div class="hidden md:flex items-center space-x-8">
<a href="{{ path('revervation') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Accueil</a>
<a href="{{ path('revervation_contact') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Catalogue</a>
<a href="{{ path('revervation_contact') }}" class="text-gray-700 hover:text-blue-600 font-medium transition-colors">Contact</a>
<a href="{{ path('reservation_search') }}" class="p-2 text-gray-500 hover:text-blue-600 transition-colors" aria-label="Rechercher">

View File

@@ -38,7 +38,6 @@
<div class="absolute -bottom-6 -left-6 bg-white p-6 rounded-3xl shadow-xl hidden md:block">
<div class="flex items-center gap-4">
<div class="p-3 bg-amber-100 rounded-2xl text-amber-600 uppercase font-black text-xs">Top Qualité</div>
<p class="text-sm font-bold text-gray-800">Structures <br>certifiées NF</p>
</div>
</div>
</div>
@@ -46,50 +45,15 @@
</div>
</section>
{# --- SECTION BENTO GRID : Pourquoi nous ? --- #}
<section class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<h2 class="text-3xl font-black text-gray-900 mb-12 text-center md:text-left">Pourquoi choisir <span class="text-blue-600">Ludikevent</span> ?</h2>
<div class="grid grid-cols-1 md:grid-cols-4 gap-6">
{# Tuile Large #}
<div class="md:col-span-2 bg-gradient-to-br from-blue-600 to-blue-700 rounded-[2.5rem] p-8 text-white relative overflow-hidden group">
<div class="relative z-10">
<h3 class="text-2xl font-bold mb-4">Livraison & Montage</h3>
<p class="text-blue-100">On s'occupe de tout. On dépose, on gonfle, et on revient chercher la structure. Vous profitez seulement !</p>
</div>
<div class="absolute -bottom-10 -right-10 opacity-20 group-hover:scale-110 transition-transform">
<svg class="w-48 h-48" fill="currentColor" viewBox="0 0 24 24"><path d="M19 8h-2V5h-7v3H5a3 3 0 00-3 3v6h2a3 3 0 006 0h4a3 3 0 006 0h2v-5a3 3 0 00-3-3z"/></svg>
</div>
</div>
{# Tuile Moyenne #}
<div class="bg-white border border-gray-100 rounded-[2.5rem] p-8 shadow-sm hover:shadow-md transition-shadow">
<div class="w-12 h-12 bg-amber-100 text-amber-600 rounded-2xl flex items-center justify-center mb-6">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z"/></svg>
</div>
<h3 class="text-xl font-bold text-gray-900 mb-2">Sécurité</h3>
<p class="text-gray-500 text-sm">Châteaux inspectés et désinfectés avant chaque location.</p>
</div>
{# Tuile Moyenne #}
<div class="bg-white border border-gray-100 rounded-[2.5rem] p-8 shadow-sm hover:shadow-md transition-shadow">
<div class="w-12 h-12 bg-green-100 text-green-600 rounded-2xl flex items-center justify-center mb-6">
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
</div>
<h3 class="text-xl font-bold text-gray-900 mb-2">Dispo 7j/7</h3>
<p class="text-gray-500 text-sm">Une question ? Un événement de dernière minute ? On répond présent.</p>
</div>
</div>
</section>
{# --- SECTION CATALOGUE : Les produits --- #}
<section id="catalogue" class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex justify-between items-end mb-12">
<div>
<h2 class="text-3xl font-black text-gray-900">Nos Best-Sellers</h2>
<p class="text-gray-500 mt-2">Les structures préférées de nos clients à Danizy.</p>
<p class="text-gray-500 mt-2">Les structures préférées de nos clients.</p>
</div>
<a href="{{ path('reservation_search') }}" class="text-blue-600 font-bold hover:underline flex items-center gap-2">
<a href="{{ path('revervation_contact') }}" class="text-blue-600 font-bold hover:underline flex items-center gap-2">
Tout voir
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path d="M14 5l7 7m0 0l-7 7m7-7H3"/></svg>
</a>