Heim  >  Fragen und Antworten  >  Hauptteil

Der Titel wurde wie folgt umgeschrieben: Property-Routing-Probleme in Symfony 5.4 behoben

Es gibt eine Lösung in RFE; verwenden Sie den bin-Befehl und die PHP-Version, um das Problem zu lösen

Ich arbeite an einer neuen Anwendung basierend auf Symfony 5.4 und PHP 7.4, um neue Ergänzungen und Änderungen in Symfony 6 zu testen. Ich habe die Entitäten und CRUD mit dem Entity Builder in der Konsole erstellt und die Datenbank wurde perfekt erstellt. Allerdings verwenden Generatoren neue „Attribute“ (gemäß der Konvention in https://symfony.com/doc/5.4/routing.html) anstelle von „klassischen“ Annotationen. Beim Debuggen über die Konsole, um die generierten Pfade anzuzeigen, werden alle im Controller definierten Routen nicht angezeigt (ein 404-Fehler wird natürlich angezeigt, wenn im Entwicklungsmodus auf die URL zugegriffen wird). Ich habe beschlossen, das Attribut durch eine klassische Annotation zu ersetzen, und der Pfad wurde angezeigt und der 404-Fehler verschwand. Aber jetzt habe ich festgestellt, dass der Generator das Repository für die Logikverarbeitung durch den Entitätsmanager verwendet, und wenn ich auf den Index zugreife, um von vorne zu beginnen, erhalte ich die folgende Fehlermeldung:

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

Der im Debugger angezeigte Codeausschnitt lautet wie folgt:

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

Die Entität beginnt mit:

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;

...

Meine größte Sorge ist, dass ich wohl nicht vollständig auf Annotationen zurückgreifen kann, um das gesamte CRUD neu zu schreiben, was eine Menge Arbeit bedeutet (was ich versuche, durch die Verwendung von Generatoren zu vermeiden), also gibt es definitiv etwas damit zu tun Eigenschaften Etwas, das ich übersehen habe. Hier ist ein Controller, dessen CRUD ich noch nicht geändert habe, sodass jeder einen Blick darauf werfen und herausfinden kann, warum der Router mit dieser Art von Annotation keinen definierten Pfad finden kann.

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(),
        ]);
    }

...

Was ist das Problem bei all dem? Dank im Voraus.

P粉035600555P粉035600555257 Tage vor293

Antworte allen(2)Ich werde antworten

  • P粉101708623

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

    我遇到了类似的情况,对我来说,这与Trait(位于src/Entity/Traits下)上的错误命名空间有关。

    这个Trait甚至没有被使用,但显然它仍会导致这个错误。

    Antwort
    0
  • P粉860370921

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

    如第一个评论中所述,强制每个bin/console(用于make:命令)和composer命令都要通过在命令前加上php7.4来运行,这样一切都可以正常工作,但是对于“经典”注释,我没有找到在php7.4中在控制器中使用属性的方法。.php-version文件似乎只被symfony-cli用于启动开发web服务器。希望这对将来可能遇到这种情况的任何人有所帮助。

    Antwort
    0
  • StornierenAntwort