首页 > 解决方案 > 如何替换 Symfony 4 函数中的变量?

问题描述

我在我的 Controller 中创建了一个与 Entity 一起使用的函数Members。我现在要做的是使功能灵活,以便我也可以将它用于所有其他实体。因此,实体的名称应取决于蛞蝓。所以在这种情况下slug = members

/**
  * @Route("/pages/{slug}/forms", name="forms", methods={"POST", "GET"})
  */

  public function form($slug, Request $request){
     $item = new Members();    
     $item= $this->getDoctrine()->getRepository(Members::class)->find($id);
 }

所以我想做的是用 slug 替换实体名称:

/**
  * @Route("/pages/{slug}/forms", name="forms", methods={"POST", "GET"})
  */

  public function form($slug, Request $request){
     $item = new $slug();    
     $item= $this->getDoctrine()->getRepository($slug::class)->find($id);
 }

但我收到一条错误消息:

试图从全局命名空间加载类“成员”。您是否忘记了“使用”声明?

这与蛞蝓的大写/小写有关吗?

标签: phpfunctionsymfonyvariablescontroller

解决方案


我们所有的实体可能都在src\Entity类似App\Entity.

此外,您的 slug 中的成员是小写的,但是您的课程以大写字母开头。

你需要做的就是确保members成为Members,以及你说的地方

$item = new $slug()

你可能想要:

$fullClassName = 'App\\Entity\\' . ucwords($slug);
$item = new $fullClassName()`

试一试,让我知道你的进展如何!


推荐阅读