Bonjour,
Je suis assez novice en développement.
J'essaye de suivre le début de la formation Symfony et à la fin de la seconde vidéo, j'ai un message d'erreur :
Symfony\Component\DependencyInjection\Exception\ RuntimeException
\vendor\symfony\dependency-injection\Compiler\AbstractRecursivePass.php (line 160)
La ligne 160 :
throw new RuntimeException(sprintf('Invalid service "%s": class%s has no constructor.', $this->currentId, sprintf($class !== $this->currentId ? ' "%s"' : '', $class)));
En fait c'est après avoir utilisé les routes avec Annotations apparemment.
Quelqu'un aurait-il la solution ?
Bonjour,
De façon à pouvoir avancer dans la formation, j'ai fais les routes sans passer par les annotations mais directement dans le fichier routes.yaml
Plus loin à 25 minutes dans la 3ème vidéo, quand j'ajoute la partie ObjectManager :
/**
Qui est utilisé ici :
/**
j'ai un message d'erreur.
J'ai essayé "composer update" et j'ai ce message d'erreur :
Executing script cache:clear [KO]
[KO]
Script cache:clear returned with error code 1
!! In DefinitionErrorExceptionPass.php line 54:
!! Cannot autowire service "App\Controller\PropertyController": argument "$em" of method "__construct()" references in
!! terface "Doctrine\Persistence\ObjectManager" but no such service exists. You should maybe alias this interface to t
!! he existing "doctrine.orm.default_entity_manager" service.
Script @auto-scripts was called via post-update-cmd
salut voila ce que j'ai pour le constructeur
/**
@Var PropertyRepository
*/
private $repository;
public function __construct (PropertyRepository $repository, ObjectManager $em)
{
$this->repository=$repository;
$this->em=$em;
}
as-tu ajouté cette ligne sur le fichier services.yaml
Doctrine\Common\Persistence\ObjectManager: '@doctrine.orm.default_entity_manager'
Bonjour,et merci pour vos réponses,
J'ai :
/**
@var Environment
*/
private $twig;
/**
@var PropertyRepository
*/
private $repository;
/**
@var ObjectManager
*/
private $em;
/**
@param ObjectManager $em
*/
public function __construct(Environment $twig, PropertyRepository $repository, ObjectManager $em)
{
$this->twig = $twig;
$this->repository = $repository;
$this->em = $em;
}
J'ai ajouté la ligne :
Doctrine\Persistence\ObjectManager: 'doctrine.orm.default_entity_manager'
à la fin du fichier "services.yaml".
Cela retourne toujours une erreur :
Symfony\Component\Config\Exception\ LoaderLoadException
in \maSuperAgence\vendor\symfony\config\Loader\FileLoader.php (line 180)
// prevent embedded imports from nesting multiple exceptions
if ($e instanceof LoaderLoadException) {
throw $e;
}
throw new LoaderLoadException($resource, $sourceResource, null, $e, $type);
}
}
return null;
}
voici un code qui fonction chez moi la j'ai garder just le cas d'ajout d'un bien donc il faut supprimer les use dont tu n'a pas besoin et faire attention au nom auquel tu adapte a ton cas.
<?php
namespace App\Controller;
use App\Entity\Property;
use App\Entity\SearchProperty;
use App\Form\PropertySearchType;
use App\Repository\PropertyRepository;
//use Doctrine\ORM\EntityManager;
//use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Common\Persistence\ObjectManager;
//use Doctrine\Common\Persistence\ObjectManager;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
//use Cocur\Slugify\Slugify;
class PropertyController extends AbstractController
{
/**
@Var PropertyRepository
*/
private $repository;
public function __construct (PropertyRepository $repository, ObjectManager $em)
{
$this->repository=$repository;
$this->em=$em;
}
/**
@Route("/biens", name="biens")
*/
public function index ():Response
{
$property = new Property();
$property->setTitle('Premier bien')
->setDescription('Les biens les plus importants')
->setPrice(230)
->setRooms(3)
->setBedRooms(2)
->setSurface(90)
->setFloor(4)
->setHeat(0)
->setPostalCode('31000')
->setCity('Oran')
->setAddress('4 rue des jardins');
$em=$this->getDoctrine()->getManager();
$em->persist($property);
$em->flush();
return $this->render('property/index.html.twig', ["properties"=>$properties]);
}