在RFE中有一個解決方案;使用bin指令和php版本解決問題
我正在處理一個基於Symfony 5.4和PHP 7.4的新應用程序,以測試Symfony 6中的新添加和更改。我使用控制台中的實體生成器創建了實體和CRUD,資料庫創建完美。然而,生成器使用新的“attributes”(根據https://symfony.com/doc/5.4/routing.html中的約定),而不是“classic”註釋。透過控制台偵錯以查看生成的路徑,控制器中定義的任何路由都不會顯示(當在開發模式下存取URL時,當然會顯示404錯誤)。我決定用經典註解替換屬性,路徑顯示出來,404錯誤消失了。但是現在,我發現生成器使用儲存庫透過實體管理器進行邏輯處理,當存取索引以從頭開始時,我得到以下錯誤:
找不到类“App\Entity\Room”的实体管理器。请检查您的Doctrine配置,确保其配置为加载此实体的元数据。
偵錯器中顯示的程式碼片段如下:
class RoomRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Room::class); // 这里是错误的地方 }
實體以以下方式開始:
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; ...
我最擔心的是,我猜我不能完全倒退到註釋來重寫整個CRUD,這是一項很大的工作(這正是我使用生成器想要避免的),所以肯定有關於屬性的一些我忽略的東西。這裡有一個我尚未修改CRUD的控制器,所以任何人都可以查看並找出為什麼路由器無法找到帶有這種類型註釋的定義路徑。
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(), ]); } ...
所有這些的問題是什麼?先感謝。
我遇到了類似的情況,對我來說,這與Trait(位於src/Entity/Traits下)上的錯誤命名空間有關。
這個Trait甚至沒有被使用,但顯然它仍會導致這個錯誤。
如第一個評論所述,強制每個bin/console(用於make:命令)和composer命令都要透過在命令前加上php7.4來運行,這樣一切都可以正常工作,但是對於「經典」註釋,我沒有找到在php7.4中在控制器中使用屬性的方法。 .php-version檔案似乎只被symfony-cli用來啟動開發web伺服器。希望這對將來可能遇到這種情況的任何人有所幫助。