```
✨ feat(Controller/composer): Ajoute robots.txt et modifie les routes de réservation.
```
This commit is contained in:
@@ -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
67
composer.lock
generated
@@ -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",
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user