首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用::class按配置传递类并在Laravel中检索

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

Stack Overflow用户
提问于 2018-12-14 21:38:18
回答 1查看 905关注 0票数 0

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

代码语言:javascript
运行
复制
'ppr' => [
    'validate' => TestRequest::class
];

现在,我想在系统的其他部分检索这个类,并使用它来验证表单(控制器之外)。

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

由于我已经接受了仅仅在控制器中使用reuqest并不那么容易,所以我仍然想知道如何通过配置传递一个类。当传递雄辩的模型时,它的工作方式就像一个魅力(或者配置数组与中间件等),所以我想IoC应该有一些神奇的绑定来实现这一点,是真的吗?

我的问题是,如何使用像上面那样传递的类,而不像那样初始化它:

代码语言:javascript
运行
复制
$obj = new $className;
EN

回答 1

Stack Overflow用户

发布于 2018-12-14 21:53:42

Laravel (和许多其他应用程序)使用依赖注入来实现这一魔力--你的话,而不是我的!:D

服务容器似乎是在Laravel中处理这个问题的工具,应该对你有帮助。

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

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

代码语言:javascript
运行
复制
$this->app->bind('HelpSpot\API', function ($app) {
    return new HelpSpot\API($app->make('HttpClient'));
});

另外:

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

代码语言:javascript
运行
复制
$api = $this->app->make('HelpSpot\API');

和:

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

代码语言:javascript
运行
复制
$api = $this->app->makeWith('HelpSpot\API', ['id' => 1]);

IMHO,我将查找在本地Laravel代码(通常是照明供应商)中实现它的位置/方式,并查看它是如何使用/如何实现的。

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

我不知道您是如何实现类的/在哪里/为什么/如何实现的,以及为什么您需要这个功能,而这个功能还不存在。Laravel很擅长在你需要的地方设置好东西,所以在打破盒子之前要三思而行,并确保你的情况没有默认的解决方案!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53787213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档