Bonjour j'ai une erreur à 18 minutes sur la vidéo 2 du tuto symfony
Invalid service "App\Controller\HomeController": class has no constructor.
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
class HomeController extends AbstractController
{
/**
* @Route ("/", "name="home")
* @return Response
*/
public function index(): Response
{
return $this->render('pages/home.html.twig');
}
}
A quel endroit ai je fais une erreur ?
Sachant que ça marche si j'ai ça
``
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
class HomeController extends AbstractController
{
/**
@return Response
*/
private $twig;
public function __construct($twig)
{
$this->twig = $twig;
}
public function index(): Response
{
return $this->render('Pages/home.html.twig');
}
}
``
Ca c'est pas correct :
/**
* @Route ("/", "name="home")
* @return Response
*/
et pourtant c'est bien ce qu'il fait à 17.32 min
en fait il faut un constructeur pour la page HomeController si je ne met pas le
public function __construct($twig) { $this->twig = $twig; }
ça ne marche pas, étrangement sans le controlleur ça marche pour la page ProprietesController
mais ça c'est bien la meme chose que sur le tuto
``
/**
Encore une fois tu recopies bêtement et tu ne prends pas le temps de lire la doc que je t'ai envoyé.
En plus de recopier tu recopies mal ! A 17:32 sur la vidéo 2 je ne vois pas la même syntaxe que ce que tu me montres.
j'ai lu la doc apres si ça continue à ne pas marcher comme sur le tuto je regarderais les autres façon de le faire dnas la doc
pour HomeController j'ai ça
``<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
class HomeController extends AbstractController
{
/**
@return Response
*/
private $twig;
public function __construct($twig)
{
$this->twig = $twig;
}
public function index(): Response
{
return $this->render('Pages/home.html.twig');
}
} et pour ProprieteController j'ai ça
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ProprieteController extends AbstractController
{
/**
@return Response
*/
public function index(): Response
{
return $this->render('propriete/index.html.twig',
[
'current_menu' => 'propriete'
]);
}
}``
Pourquoi il faut le construct sur le home alors que sur le propriete je peux m'en passer...
Non ce n'est pas ca ! Encore une fois tu recopies mal ! Il faut faire un effort sérieusement, y'a rien qui te choque entre tes deux routes ? :
@Route ("/biens", name="propriete.index")
et
@Route ("/home", "name="home")
Et arrêtes de poser la question à la seconde, regardes la suite c'est souvent expliqué et en plus ca va changer.
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Twig\Environment;
class HomeController extends AbstractController
{
/**
* @Route ("/", name="home")
* @return Response
*/
public function index(): Response
{
return $this->render('Pages/home.html.twig');
}
}
Utililes les balises quotes stp, ca me pète les yeux de déchiffrer à chaque fois !
Première ligne : 3x ALT GR + 7
Ligne 2....: ton code
Dernière ligne : 3x ALT GR + 7
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class HomeController extends AbstractController
{
/**
* @Route ("/", name="home")
* @return Response
*/
public function __construct($twig)
{
}
public function index(): Response
{
return $this->render('Pages/home.html.twig');
}
}
``
Je ne sais pas si a une incidence, mais pas d'espace entre @Route et ('/', name="home").
Non il ne faut pas à tout prix le constructeur pour cette classe. Supprimes ce *** __construct
Invalid service "App\Controller\HomeController": class has no constructor.
ExceptionStack Trace
Symfony\Component\DependencyInjection\Exception\
RuntimeException
in C:\Users\Fabien\Desktop\Symphony\MaSuperAgence\vendor\symfony\dependency-injection\Compiler\AbstractRecursivePass.php (line 157)
} catch (\ReflectionException $e) { throw new RuntimeException(sprintf('Invalid service "%s": ', $this->currentId).lcfirst($e->getMessage())); } if (!$r = $r->getConstructor()) { if ($required) { throw new RuntimeException(sprintf('Invalid service "%s": class%s has no constructor.', $this->currentId, sprintf($class !== $this->currentId ? ' "%s"' : '', $class))); } } elseif (!$r->isPublic()) { throw new RuntimeException(sprintf('Invalid service "%s": ', $this->currentId).sprintf($class !== $this->currentId ? 'constructor of class "%s"' : 'its constructor', $class).' must be public.'); }
Déjà tes commentaires doivent être au dessus de la fonction sinon aucun intérêt et la route est illisible :
class HomeController extends AbstractController
{
/**
* @Route ("/", name="home")
* @return Response
*/
public function index(): Response
{
return $this->render('Pages/home.html.twig');
}
}
Ensuite tu as indiqué 'Pages' avec un 'p' majuscule. Est ce que le dossier dans template c'est 'Pages' ou 'pages' ?
truc de fous sur l'autre page il demande pas le construct et sur la home il le demande
bon ben je vais laisser comme ça avec le construct vide si ça lui fait plaisir, j'espere que ça va pas gener pour la suite, 1 semaine et j'ai avancé de 2 tutos de 20 min .... 1 problème de commande pour lancer le serveur et un problème de constructeur.....
il yavait ça que j'avais mis
App\Controller\HomeController:
tags: ['controller.service_arguments']
arguments:
$twig: '@twig'
effectivement ça marche maintenant
j'ai pas vu à quel moment il supprime ça du fichier services...
j'ai encore ça dans le route aussi
home:
path: /
controller: App\Controller\HomeController::index
ça à l'air bon, pas d'erreur, j'ai pas vu à quel moment il supprimait ce qu'il avait mis dans routes et services dans la vidéo, switcher de fenetre à chaque fois pas top...