Php 如果不使用整个框架,如何加载Symfony组件配置文件?
我正在尝试使用Symfony路由器和DI组件引导一个简单的微服务类型的应用程序,但没有使用Php 如果不使用整个框架,如何加载Symfony组件配置文件?,php,symfony,Php,Symfony,我正在尝试使用Symfony路由器和DI组件引导一个简单的微服务类型的应用程序,但没有使用Symfony/skeleton包作为起点 路由可以工作,但DI不行。看一下,不清楚我的应用程序实际如何使用config/services.yaml文件。我不明白它是什么时候加载的,如何加载的,以及我如何告诉Symfony使用services.php 类似地,如果我安装新的composer软件包,它们会在config/packages/中转储一些.yamlconfig文件。然后我必须使用config组件手动
Symfony/skeleton
包作为起点
路由可以工作,但DI不行。看一下,不清楚我的应用程序实际如何使用config/services.yaml
文件。我不明白它是什么时候加载的,如何加载的,以及我如何告诉Symfony使用services.php
类似地,如果我安装新的composer软件包,它们会在
config/packages/
中转储一些.yaml
config文件。然后我必须使用config
组件手动加载这些文件吗?所有这些通常都发生在应用程序内核中(在Symfony应用程序中),由“front controller”脚本(例如public/index.php
)实例化和引导
在:
这将加载config/packages
目录中的所有*.yaml
文件,并加载文件config/services.php
,但仅当文件config/services.yaml
不存在时加载
如果您在不使用框架的情况下构建自己的应用程序,则必须在对应用程序有意义的地方加载这些文件
随着Symfony 5占地面积的减少,构建您自己的可能并不特别划算,您可以使用最小的Symfony/skeleton
,并且您已经有了一个非常“微型”的起点,而无需花费时间来决定这些事情
如果出于特定要求或作为学习练习,您决定“构建自己的”,我建议您阅读文档的这一部分:。这是一种非常有用的方法,可以了解多个部分是如何组合在一起的。我想创建一个独立的PHP应用程序,而不是Symfony应用程序,并使用路由和依赖项注入组件。我现在明白了,在这种情况下,我必须手动加载配置文件。在DI组件的情况下,这是否意味着我不能在ie.construcor方法中键入hint类,而必须首先在容器中手动注册它们?至少这里似乎有这样的建议:您可以很好地使用autowire。您只需要按照说明启用自动布线。如果您不想手动定义每个服务,出于好奇,您可能希望
加载()
它们:有什么好的理由不使用更多的组件吗?手动实现您需要的所有内容可能需要更多的工作,我不认为“更多组件”会带来如此巨大的性能收益,您的意思是将我的微服务创建为Symfony应用程序?我想我低估了在独立应用程序中使用组件的学习曲线。关于你问题的最后一段,任何在config/packages下存放文件的包实际上都是一个Symfony包,专门设计用于Symfony框架内。所以答案是:您基本上无法使用这些特定的软件包。配置是框架的重要组成部分。如果您还没有,我建议您阅读关于配置的内容,或者从那里开始。仍然使用框架捆绑包,但让您或多或少地完全控制配置。只是想指出,您问题中的DI链接指向框架文档。如果您想了解如何使用DI单机版,请参阅。
protected function configureContainer(ContainerConfigurator $container): void
{
$container->import('../config/{packages}/*.yaml');
$container->import('../config/{packages}/'.$this->environment.'/*.yaml');
if (is_file(\dirname(__DIR__).'/config/services.yaml')) {
$container->import('../config/services.yaml');
$container->import('../config/{services}_'.$this->environment.'.yaml');
} elseif (is_file($path = \dirname(__DIR__).'/config/services.php')) {
(require $path)($container->withPath($path), $this);
}
}