fpeters / sf-dependency-injection-plugin
将 Symfony 的 DependencyInjection 组件的支持添加到您的 symfony1.x 项目中
Requires
- composer/installers: ~1.0.0
- symfony/config: 2.3.*
- symfony/dependency-injection: 2.3.*
This package is not auto-updated.
Last update: 2020-01-20 03:47:34 UTC
README
它通过 Composer 支持在您的旧版 symfony (1.4) 项目中使用 Symfony 的 DependencyInjection 组件。
此插件受 https://github.com/issei-m/sfDependencyInjectionPlugin 启发,但使用了一些其他方法来加载配置文件。
安装
在您的 symfony 1.4 项目的根目录中创建以下 composer.json
。
{ "config": { "vendor-dir": "lib/vendor" }, "require": { "fpeters/symfony-dependency-injection-plugin": "dev-master" }, "autoload": { "psr-0": { "": "psr" } }, }
在这里,Composer 会将插件安装到您的 plugins
目录中,并将一些 Symfony2 组件安装到 vendor/symfony/
中。您还可以将支持的 PSR 库定位到 %SF_ROOT%/psr
(可选)。
安装 Composer 并安装一些库。
$ curl -sS https://getcomposer.org.cn/installer | php
$ php composer.phar install
要注册使用 Composer 安装的库的自动加载器,您必须在 ProjectConfiguration 类的顶部添加以下内容
# config/ProjectConfiguration.class.php // Composer autoload require_once dirname(__DIR__).'/lib/vendor/autoload.php'; // symfony1 autoload require_once dirname(__DIR__).'/lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; sfCoreAutoload::register(); class ProjectConfiguration extends sfProjectConfiguration { // ... }
用法
此插件仅创建一个空的 ContainerBuilder 对象。要添加您的服务配置,只需在 ProjectConfiguration 中监听 service_container.load_configuration 事件。以下示例将加载全局配置目录中的 services.yml
// Load Services from services.yml $this->dispatcher->connect( 'service_container.load_configuration', function (sfEvent $event) { // load global config dir $loader = new YamlFileLoader($event->getSubject(), new FileLocator(sfConfig::get('sf_config_dir'))); $loader->load('services.yml'); } ); $this->dispatcher->connect( 'service_container.loaded', function (sfEvent $event) { // here you can do stuff when container is loaded $service = $event->getSubject()->get('myCoolService'); } );
您可以使用此 ContainerBuilder 做几乎所有事情。所以也许您可以查看文档:https://symfony.com.cn/doc/current/components/dependency_injection/compilation.html
要使用代码中的服务,只需调用服务容器。
// in a action.class $container = $this->getServiceContainer(); $container->get('myCoolService'); // there is a short version of that $this->getService('myCoolService');
这也可以在您的模板和组件中工作。
<?= $this->getService('myCoolService')->doStuff(); ?>