recherche

Maison  >  Questions et réponses  >  le corps du texte

Titre réécrit comme suit : Problèmes de routage de propriétés dans Symfony 5.4 résolus

Il existe une solution dans RFE ; utilisez la commande bin et la version php pour résoudre le problème

Je travaille sur une nouvelle application basée sur Symfony 5.4 et PHP 7.4 pour tester les nouveaux ajouts et modifications dans Symfony 6. J'ai créé les entités et CRUD à l'aide du générateur d'entités dans la console et la base de données a été parfaitement créée. Cependant, les générateurs utilisent de nouveaux "attributs" (selon la convention de https://symfony.com/doc/5.4/routing.html) au lieu d'annotations "classiques". Débogage via la console pour voir les chemins générés, les routes définies dans le contrôleur n'apparaîtront pas (une erreur 404 apparaîtra bien sûr lors de l'accès à l'URL en mode développement). J'ai décidé de remplacer l'attribut par une annotation classique et le chemin est apparu et l'erreur 404 a disparu. Mais maintenant, j'ai découvert que le générateur utilise le référentiel pour le traitement logique via le gestionnaire d'entités, et lors de l'accès à l'index pour repartir de zéro, j'obtiens l'erreur suivante :

找不到类“App\Entity\Room”的实体管理器。请检查您的Doctrine配置,确保其配置为加载此实体的元数据。

L'extrait de code affiché dans le débogueur est le suivant :

class RoomRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Room::class);  // 这里是错误的地方
    }

L'entité commence par :

namespace App\Entity;

use App\Repository\RoomRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: RoomRepository::class)]
class Room
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column()]
    private ?int $id = null;

...

Ma plus grande préoccupation est que je suppose que je ne peux pas complètement me rabattre sur les annotations pour réécrire l'intégralité du CRUD, ce qui demande beaucoup de travail (c'est ce que j'essaie d'éviter d'utiliser des générateurs), donc il y a certainement quelque chose à voir avec propriétés Quelque chose que j'ai négligé. Voici un contrôleur dont je n'ai pas encore modifié le CRUD, afin que tout le monde puisse y jeter un œil et comprendre pourquoi le routeur ne trouve pas de chemin défini avec ce type d'annotation.

namespace App\Controller;

use App\Entity\RoomFeature;
use App\Form\RoomFeatureType;
use App\Repository\RoomFeatureRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/admin/feature')]
class RoomFeatureController extends AbstractController
{
    #[Route('/', name: 'admin_room_feature_index', methods: ['GET'])]
    public function index(RoomFeatureRepository $roomFeatureRepository): Response
    {
        return $this->render('room_feature/index.html.twig', [
            'room_features' => $roomFeatureRepository->findAll(),
        ]);
    }

...

Quel est le problème avec tout ça ? Merci d'avance.

P粉035600555P粉035600555308 Il y a quelques jours331

répondre à tous(2)je répondrai

  • P粉101708623

    P粉1017086232024-01-11 11:51:39

    J'ai rencontré une situation similaire et pour moi, elle était liée au mauvais espace de noms sur Traits (situé sous src/Entity/Traits).

    Ce trait n'est même pas utilisé, mais apparemment, il provoque toujours cette erreur.

    répondre
    0
  • P粉860370921

    P粉8603709212024-01-11 11:26:29

    Comme mentionné dans le premier commentaire, forcer l'exécution de chaque commande bin/console (pour la commande make:) et composer en préfixant la commande avec php7.4 fait que tout fonctionne correctement, mais pour l'annotation " Classic ", je ne l'ai pas fait trouvez un moyen d'utiliser les attributs dans les contrôleurs en php7.4. Le fichier .php-version semble être utilisé uniquement par symfony-cli pour démarrer le serveur Web de développement. J'espère que cela aidera tous ceux qui pourraient rencontrer cette situation à l'avenir.

    répondre
    0
  • Annulerrépondre