如何在Symfony 4函数中替换变量?

pea*_*ove 0 php variables controller function symfony

我在Controller中创建了一个与Entity一起使用的函数Members.我现在要做的是使功能灵活,这样我就可以将它用于我所有其他实体.因此,实体的名称应该取决于slug.所以在这种情况下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);
 }
Run Code Online (Sandbox Code Playgroud)

所以我要做的是用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);
 }
Run Code Online (Sandbox Code Playgroud)

但是我收到一条错误消息:

尝试从全局命名空间加载类"成员".你忘记了"使用"声明吗?

这是否与slug的大写/小写有关?

del*_*8uk 5

我们所有的实体都可能是这样的src\Entity,并且取决于你如何设置每个实体将在某些命名空间或其他名称中App\Entity.

而且,你的slug中的成员是小写的,但是你的课程以captital开头.

您需要做的就是确保members成为Members,并在您说的地方

$item = new $slug()

你可能想要:

$fullClassName = 'App\\Entity\\' . ucwords($slug);
$item = new $fullClassName()`
Run Code Online (Sandbox Code Playgroud)

试一试,让我知道你是怎么过的!

  • @Jarla:delboy1978uk建议应该使用什么,但请确保您应用适当的输入清理,以便一些敏感数据不会泄漏(如果有的话) (3认同)