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);
}
我在控制器中使用一个函数来插入具有不同模型的几个不同表。我的意思是在控制器模型中是可变的。
下面的代码工作得很好,但我不喜欢语法,我很确定除了 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);
}