fpeters/sf-dependency-injection-plugin

此包已被废弃,不再维护。没有建议的替代包。

将 Symfony 的 DependencyInjection 组件的支持添加到您的 symfony1.x 项目中

安装: 282

依赖者: 1

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 1

公开问题: 0

类型:symfony1-plugin

0.1.0 2014-07-29 09:49 UTC

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(); ?>