Laravel 在控制器中使用变量调用模型

Laravel calling model with variable in controller

我在控制器中使用一个函数来插入具有不同模型的几个不同表。我的意思是在控制器模型中是可变的。

下面的代码工作得很好,但我不喜欢语法,我很确定除了 str_replace 之外,必须有一些其他方法来调用名称前面带有 \App\ 的模型。

仅通过模型名称调用而没有 \App\ 会导致 laravel 错误 Class not found。我已经在控制器的文件中写了 use \App\ModelName 但它仍然不起作用。

public function storeCommon(Request $request){
   $model = '"\App\"'. $request->model;
   $model =  str_replace ( "\"", "", $model ) ;

   ........
   ........       

   $row['text'] = $request->text;
   ........
   ........
   $common = $model::create($row);
}

我宁愿定义一组可能的模型并在代码中使用它。这样您 将保护您的代码 免受不需要的模型的调用,当然您的代码将更具可读性:

protected $possibleModels = [
    'Model1' => \App\Model1::class,
    'Model2' => \App\Model2::class,
    ...
    ];

public function storeCommon(Request $request){
    if (!isset($this->possibleModels[$request->model])) {
        abort(404);
    }
    $model = $this->possibleModels[$request->model];
    $row['text'] = $request->text;
    ...
    $common = $model::create($row);
}