我通过ajax帖子将变量发送到我的路线。基于type
值的值,我创建了一个新的Object,如下所示:
if($request->get('type') === 'HardwareType'){
$e = new HardwareType();
}else if($request->get('type') === 'SetupType'){
$e => new SetupType();
}else{
new NotFoundHttpException();
}
即使switch
我认为它仍然“丑陋”,这很快就会失控。我有什么办法吗?像这样:
$e = new $request->get('type')();
任何暗示赞赏
编辑我使用这个use AppBundle\Entity\HardwareType;
等等的类。
答案 0 :(得分:3)
你可以这样做:
$e = $request->get('type');
$class = new $e();
如果需要,可以像这样添加路径或类:
$e = 'AppBundle\Entity\' . $request->get('type');
显然,您需要在文件的开头添加use
,如果该类存在,您可以在new
之前检查
像这样:
if (!class_exists($e)) {
//exception
}
答案 1 :(得分:2)
只需使用关联数组!定义可接受的类,以便您不希望允许的其他类型的类无法实例化!
然后只检查数组中的键,如果是,则创建一个新的Whatever()!
$types = [
'HardwareType' => HardwareType::class,
'etc' => SomeOther::class
];
$getVar = $request->get('type');
// So all you need do is
if (array_key_exists($getVar, $types)) {
$e = new $types[$getVar]();
} else {
throw new NotFoundHttpException();
}