Tajuk ditulis semula untuk dibaca: Isu penghalaan harta dalam Symfony 5.4 diselesaikan
P粉035600555
P粉035600555 2024-01-10 16:38:04
0
2
345

Terdapat penyelesaian dalam RFE; gunakan arahan bin dan versi php untuk menyelesaikan masalah

Saya sedang mengusahakan aplikasi baharu berdasarkan Symfony 5.4 dan PHP 7.4 untuk menguji penambahan dan perubahan baharu dalam Symfony 6. Saya mencipta entiti dan CRUD menggunakan pembina entiti dalam konsol dan pangkalan data telah dibuat dengan sempurna. Walau bagaimanapun, penjana menggunakan "atribut" baharu (mengikut konvensyen dalam https://symfony.com/doc/5.4/routing.html) dan bukannya anotasi "klasik". Menyahpepijat melalui konsol untuk melihat laluan yang dijana, mana-mana laluan yang ditakrifkan dalam pengawal tidak akan dipaparkan (ralat 404 sudah tentu akan muncul apabila mengakses URL dalam mod pembangunan). Saya memutuskan untuk menggantikan atribut dengan anotasi klasik dan laluan muncul dan ralat 404 hilang. Tetapi sekarang, saya mendapati bahawa penjana menggunakan repositori untuk pemprosesan logik melalui pengurus entiti, dan apabila mengakses indeks untuk bermula dari awal, saya mendapat ralat berikut:

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

Coretan kod yang ditunjukkan dalam penyahpepijat adalah seperti berikut:

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

Entiti bermula dengan:

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;

...

Kebimbangan terbesar saya ialah saya rasa saya tidak boleh kembali sepenuhnya kepada anotasi untuk menulis semula keseluruhan CRUD, yang merupakan kerja yang banyak (itulah yang saya cuba elakkan daripada menggunakan penjana), jadi pasti ada kaitan dengan hartanah Sesuatu yang saya terlepas pandang. Berikut ialah pengawal yang saya belum mengubah suai CRUD lagi, jadi sesiapa sahaja boleh melihat dan mengetahui sebab penghala tidak dapat mencari laluan yang ditentukan dengan jenis anotasi ini.

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

...

Apa masalah dengan semua ini? Terima kasih terlebih dahulu.

P粉035600555
P粉035600555

membalas semua(2)
P粉101708623

Saya menghadapi situasi yang sama dan bagi saya ia berkaitan dengan ruang nama yang salah pada Traits (terletak di bawah src/Entity/Traits).

Sifat ini tidak digunakan pun, tetapi nampaknya ia masih menyebabkan ralat ini.

P粉860370921

Seperti yang dinyatakan dalam ulasan pertama, memaksa setiap bin/konsol (untuk membuat: perintah) dan arahan komposer dijalankan dengan memberi awalan arahan dengan php7.4 menjadikan semuanya berfungsi dengan baik, tetapi untuk anotasi "Klasik", saya tidak melakukannya cari cara untuk menggunakan atribut dalam pengawal dalam php7.4. Fail versi .php nampaknya hanya digunakan oleh symfony-cli untuk memulakan pelayan web pembangunan. Semoga ini membantu sesiapa sahaja yang mungkin menghadapi situasi ini pada masa akan datang.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan