Php 使用::class按配置传递类并在Laravel中检索

Php 使用::class按配置传递类并在Laravel中检索,php,laravel,oop,ioc-container,Php,Laravel,Oop,Ioc Container,我有一个配置文件,其中包含这样的数组: 'ppr' => [ 'validate' => TestRequest::class ]; 现在,我想在系统的其他部分检索这个类,并使用它来验证表单(在控制器之外) 使用config('main.ppr.validate')时,我收到的只是类的名称空间名称,而不是类对象 由于我已经承认,仅仅在控制器中使用reuqests并不是那么容易,所以我仍然想知道如何通过配置传递类。 当传递有说服力的模型时,它就像一个符咒(或配置带有中间件的数

我有一个配置文件,其中包含这样的数组:

'ppr' => [
    'validate' => TestRequest::class
];
现在,我想在系统的其他部分检索这个类,并使用它来验证表单(在控制器之外)

使用
config('main.ppr.validate')
时,我收到的只是类的名称空间名称,而不是类对象

由于我已经承认,仅仅在控制器中使用reuqests并不是那么容易,所以我仍然想知道如何通过配置传递类。 当传递有说服力的模型时,它就像一个符咒(或配置带有中间件的数组等),所以我认为IoC有一些魔力来实现这一点,是真的吗

我的问题是,如何使用上面示例中传递的类,而不进行初始化,如:

$obj = new $className;
Laravel(和许多其他应用程序)使用来实现这一魔法——你的话,而不是我的话!:D

这似乎是什么处理这在拉雷维尔,应该是帮助你

直接来自Laravel文档(链接如上):

在服务提供商中,您始终可以通过$this->app属性访问容器。我们可以使用bind方法注册绑定,传递我们希望注册的类或接口名称以及返回类实例的闭包:

此外:

您可以使用make方法从容器中解析类实例。make方法接受要解析的类或接口的名称:

以及:

如果类的某些依赖项无法通过容器解析,则可以通过将它们作为关联数组传递到makeWith方法来注入它们:


总之,我会在本地Laravel代码(通常是Illumb供应商)中查找在何处/如何实现这一点,并查看如何使用/打算实现它


此外,
ClassName::class
将返回该类的名称空间+类。这就是为什么您只看到类名,而没有实际接收该类的对象/实例


我不知道你在实现你的类的什么/在哪里/为什么/如何,为什么你需要这个功能,而它还不存在。Laravel非常擅长在你需要的地方设置东西,所以在打开盒子之前要三思而后行,确保没有适合你情况的默认解决方案

TestRequest::class
实际上没有实例化该类-您没有类对象。我知道服务容器,但是我仍然不确定如何使其在这种特定情况下工作,尤其是动态的。无论如何,我有一个类,我正在向它传递数据。在这个类中,我想根据一些规则验证它。类将决定使用哪些规则。我已经注意到,即使我实现了我想要的,它也不会很好地工作。我想我将在那里手动使用验证器,并使用规则构建一些自定义类:-)谢谢!
$this->app->bind('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});
$api = $this->app->make('HelpSpot\API');
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);