在 laravel 中使用用户提供的模型名称动态制作模型
Make model dynamically using user supplied model name in laravel
我被它困住了,找不到任何合适的解决方案。我想要实现的是在我的管理面板中基于复选框值我想更改特定控件的活动状态并使用 ajax 更新数据库值。我想在控制器中创建一个通用的 ajax 函数,以避免为菜单管理器、内容管理器、文档管理器等其他控件重复编写相同的 ajax 函数 etc.So 我想将模型名称发送到 ajax 控制器,以便可以使用相同的功能。 Ajax 调用工作正常,但无法制作合适的模型。例如:
$m = new App\Model.$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;
这是因为出于安全原因,您可能不想公开所有模型数据。
我被它困住了,找不到任何合适的解决方案。我想要实现的是在我的管理面板中基于复选框值我想更改特定控件的活动状态并使用 ajax 更新数据库值。我想在控制器中创建一个通用的 ajax 函数,以避免为菜单管理器、内容管理器、文档管理器等其他控件重复编写相同的 ajax 函数 etc.So 我想将模型名称发送到 ajax 控制器,以便可以使用相同的功能。 Ajax 调用工作正常,但无法制作合适的模型。例如:
$m = new App\Model.$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;
这是因为出于安全原因,您可能不想公开所有模型数据。