Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在laravel中使用用户提供的模型名称动态创建模型_Php_Laravel_Models - Fatal编程技术网

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

Php 在laravel中使用用户提供的模型名称动态创建模型,php,laravel,models,Php,Laravel,Models,我被它卡住了,我找不到任何合适的解决办法。我想要实现的是基于复选框值的管理面板,我想要更改特定控件的活动状态,并使用ajax更新数据库值。我想在控制器中创建一个通用的ajax函数,以避免为其他控件(如菜单管理器、内容管理器、文档管理器等)重复编写相同的ajax函数。因此,我想向ajax控制器发送模型名称,以便可以使用相同的函数。Ajax调用工作正常,但无法生成适当的模型。例如: $m=新建应用程序\模型。$request->Model或$m='App\Model\'。$request->Mode

我被它卡住了,我找不到任何合适的解决办法。我想要实现的是基于复选框值的管理面板,我想要更改特定控件的活动状态,并使用ajax更新数据库值。我想在控制器中创建一个通用的ajax函数,以避免为其他控件(如菜单管理器、内容管理器、文档管理器等)重复编写相同的ajax函数。因此,我想向ajax控制器发送模型名称,以便可以使用相同的函数。Ajax调用工作正常,但无法生成适当的模型。例如: $m=新建应用程序\模型。$request->Model或$m='App\Model\'。$request->Model(添加最后一个\会产生错误)或中提供的答案也没有帮助。有没有更好的方法?如果有,请建议。我可以在下面做,但它是硬编码的,所以我想制作模型动态模型

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;
谢谢你

试试下面的代码

 if($request->model){
      $m = '\App'. '\' .$request->model;
      //other code
    }
您只需使用:

$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;
这是因为出于安全原因,您可能不想公开所有模型数据