【问题标题】:Make model dynamically using user supplied model name in laravel在 laravel 中使用用户提供的模型名称动态制作模型
【发布时间】:2018-08-05 06:59:59
【问题描述】:

我被它困住了,我找不到任何合适的解决方案。我想要实现的是在我的管理面板中基于复选框值我想更改特定控件的活动状态并使用 ajax 更新数据库值。我想在控制器中创建一个通用的 ajax 函数,以避免为其他控件(如菜单管理器内容管理器、文档管理器等)重复编写相同的 ajax 函数。所以我想将模型名称发送到 ajax 控制器以便可以使用相同的函数。 Ajax 调用运行良好,但无法制作合适的模型。例如: $m = new App\Model.$request->model OR $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;

谢谢你!!!

【问题讨论】:

    标签: php laravel models


    【解决方案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;
    

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

    【讨论】:

      【解决方案2】:

      试试下面的代码

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

      【讨论】:

        猜你喜欢
        • 2020-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-24
        • 2016-09-25
        • 2021-04-12
        • 2020-08-28
        • 1970-01-01
        相关资源
        最近更新 更多