使用laravel中用户提供的模型名称动态创建模型

时间:2018-08-05 06:59:59

标签: php laravel models

我坚持使用它,找不到适合的解决方案。我想要实现的是基于复选框值的管理面板,我想更改特定控件的活动状态并使用Ajax更新数据库值。我想在控制器中创建一个通用的ajax函数,以避免为菜单控件,内容管理器,文档管理器等其他控件重复编写相同的ajax函数,所以我想将模型名称发送给ajax控制器,以便可以使用相同的函数。 Ajax调用工作正常,但是无法建立适当的模型。例如: $ m =新的App \ Model。$ request->模型或$ m ='App \ Model \'。$ request-> model(添加最后一个\会导致错误)或Dynamically use model in laravel中提供的答案均无济于事。有没有更好的方法,如果可以,请提出建议。我可以在下面执行此操作,但是它是硬编码的,所以我想创建模型动态模型

if($request->model ==='Menu')
        $model = new \App\Http\Models\Menu;
    else if($request->model === 'News')
        $this->model = new \App\Http\Models\News;
    else if($request->model === 'Document')
    $this->model = new \App\Http\Models\Document;

谢谢!!!

2 个答案:

答案 0 :(得分:1)

您可以使用:

$modelName = '\\App\\Http\\Models\\'.$request->model;
$this->model = new $modelName;

但是,您应该添加验证以确保仅使用某些允许的模型或至少执行以下操作:

if (! in_array($request->model, ['Menu', 'News', 'Document']))
{
   throw new \Exception('Invalid model');
}
$modelName = '\\App\\Http\\Models\\'.$request->model;
$this->model = new $modelName;

这是因为出于安全原因,您可能不想公开所有模型数据。

答案 1 :(得分:0)

尝试以下代码

 if($request->model){
      $m = '\App'. '\' .$request->model;
      //other code
    }