symfony

Par FabienR, il y a 4 ans


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
{
/**

35 réponses

FabienR, il y a 4 ans

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
``
/**

  • @Route ("/", "name="home")
  • @return Response
    */
    ``
floriqn, il y a 4 ans

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.

FabienR, il y a 4 ans

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

FabienR, il y a 4 ans

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
{
/**

  • @Route ("/home", "name="home")
  • @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
{
/**

  • @Route ("/biens", name="propriete.index")
  • @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...

floriqn, il y a 4 ans

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.

FabienR, il y a 4 ans

zut, le " devant le name

FabienR, il y a 4 ans

cela dit il me demande toujours le contructeur...

floriqn, il y a 4 ans

Tu n'as pas besoin du constructeur pour ca, supprimes le et avance.

FabienR, il y a 4 ans

Invalid service "App\Controller\HomeController": class has no constructor.

FabienR, il y a 4 ans
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'); } }
floriqn, il y a 4 ans

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

FabienR, il y a 4 ans

tel quel ça ne marche pas et la c'est ce qu'il y à sur le tuto

floriqn, il y a 4 ans

Tu peux virer :

use Twig\Environment;

Sinon là c'est bon c'est quoi le problème ?

FabienR, il y a 4 ans

non erreur encore

floriqn, il y a 4 ans

Ba donnes là ! Je vais pas écrire le code à ta place !

FabienR, il y a 4 ans
<?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'); } } ``
FabienR, il y a 4 ans

ça ça marche, il faut à tout prix le construct

floriqn, il y a 4 ans

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

FabienR, il y a 4 ans

non pas d'incidence sur l'espace après le @Route

FabienR, il y a 4 ans

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.'); }
floriqn, il y a 4 ans

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' ?

FabienR, il y a 4 ans

Rien à faire il veut toujours le

public function __construct($twig) { }
FabienR, il y a 4 ans

truc de fous sur l'autre page il demande pas le construct et sur la home il le demande

FabienR, il y a 4 ans

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.....

floriqn, il y a 4 ans

T'as modifié quelque chose dans services.yaml ? Je te garantie qu'il n'y en a pas besoin.

floriqn, il y a 4 ans

Supprimes ce que tu as mis dans routes.yaml et tu pourras supprimer ton constructeur.

FabienR, il y a 4 ans

il yavait ça que j'avais mis

App\Controller\HomeController: tags: ['controller.service_arguments'] arguments: $twig: '@twig'
FabienR, il y a 4 ans

effectivement ça marche maintenant

j'ai pas vu à quel moment il supprime ça du fichier services...

floriqn, il y a 4 ans

A oui ba en plus t'avais oublié un truc... Supprimes tout puis le constructeur.

FabienR, il y a 4 ans

j'ai encore ça dans le route aussi

home: path: / controller: App\Controller\HomeController::index
FabienR, il y a 4 ans

bon ces quotes ça marche 1 fois sur 10.....

floriqn, il y a 4 ans

Il faut mettre 3 quotes, pas deux ! Tu peux tout supprimer comme je te l'ai dis.

FabienR, il y a 4 ans

ç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...