vanio/vanio-di-extra-bundle 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

vanio/vanio-di-extra-bundle

最新稳定版本:v0.1.0

Composer 安装命令:

composer require vanio/vanio-di-extra-bundle

包简介

Allows to configure dependency injection using annotations

README 文档

README

Build Status Coverage Status PHP7 License

A Symfony2/3 Bundle providing an ability to resolve services by type by calling getByType on service container and lazily inject services or parameters into public properties of classes implementing ContainerAwareInterface (like controllers, CLI commands or Doctrine fixtures) using Inject annotation. JMS DI Extra Bundle has a similar annotation but it covers much more functionality. This bundle is lightweight and does not use AOP.

Example

<?php
namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Translation\TranslatorInterface;
use Vanio\DiExtraBundle\Controller;
use Vanio\DiExtraBundle\DependencyInjection\Metadata\Inject;

class HelloController extends Controller
{
    /**
     * @var TranslatorInterface
     * @Inject
     */
    public $translator;
    
    /**
     * @Route("/hello", name="app_hello")
     * @Template
     */
    public function helloAction(): array
    {
        return ['message' => $this->translator->trans('Hello world!')];
    }
}

It is also possible to inject a service using it's ID

/**
 * @Inject("translator")
 */
public $translator;

It is also possible to inject an optional dependency which means that it does not throw exception when the service is not found.

/**
 * @Inject("translator", required=false)
 */
public $translator;

Injecting an optional dependency when injecting by type can be achieved using @var annotation.

/**
 * @var TranslatorInterface|null
 * @Inject
 */
public $translator;

Injecting of container parameters is also possible

/**
 * @Inject("%kernel.cache_dir%/app")
 */
public $cacheDirectory;

All you need to do for using the Inject annotation is to use Vanio\DiExtraBundle\DependencyInjection\ContainerAwareTrait where you normally use the default Symfony\Component\DependencyInjection\ContainerAwareTrait. There is also an abstract Vanio\DiExtraBundle\Controller you can extend as a shortcut.

Installation

Installation can be done as usually using composer. composer require vanio/vanio-di-extra-bundle

Next step is to register this bundle inside your AppKernel but you also have to tell the Kernel about the new getByType method by overriding getContainerBaseClass method.

// app/AppKernel.php
// ...

use Vanio\DiExtraBundle\DependencyInjection\Container;

class AppKernel extends Kernel
{
    // ...

    public function registerBundles(): array
    {
        $bundles = [
            // ...
            new Vanio\DiExtraBundle\VanioDiExtraBundle,
        ];

        // ...
    }

    public function getContainerBaseClass(): string
    {
        return Container::class;
    }
}

统计信息

  • 总下载量: 9.21k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 10
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2016-03-10