【问题标题】:Laravel 8 load dynamic class with namespace not foundLaravel 8加载未找到命名空间的动态类
【发布时间】:2021-12-14 10:48:38
【问题描述】:

我正在尝试在我的 Laravel 8 控制器中加载一个动态类。我有一个提供者的数据库表和一个与我项目中的类匹配的class 列。

我目前正在控制器方法中执行以下操作:

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $provider = DebtProvider::where('class', 'MyClass')->first();
    $toLoad = $provider->class;

    $class = new "App\\AssessmentProviders\\" . $toLoad($request);

    // ... do something with the $class methods etc
}

问题是,我遇到了语法错误:

消息:“语法错误,意外 '"App\\AssessmentProviders\\"' (T_CONSTANT_ENCAPSED_STRING)”

我错过了什么?

【问题讨论】:

    标签: php laravel class


    【解决方案1】:

    您需要将类命名空间放在一个变量中,然后在其上调用new。你的命名空间最后不能有::class,所以一定要使用str_replace删除它

    $class_namespace = str_replace("::class","", "App\AssessmentProviders\\" . $toLoad($request));
    $class = new $class_namespace;
    

    您也可以使用app() 方法创建所需类的实例,此方法将从服务容器提供任何所需的依赖项。

    $class = app("App\AssessmentProviders\\" . $toLoad($request) );
    

    【讨论】:

      猜你喜欢
      • 2015-03-06
      • 2011-07-23
      • 2021-12-31
      • 2014-04-05
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2015-12-03
      • 2014-10-10
      相关资源
      最近更新 更多