Phalcon依赖注入
注意
所有类都以前缀命名Phalcon
Di\AbstractInjectionAware
¶
  -  
命名空间
Phalcon\Di
 -  
使用
stdClass
 -  
继承
stdClass -  
实现
InjectionAwareInterface
 
这个抽象类提供了一个通用的访问DI的方法,适用于任何类。
属性¶
方法¶
返回内部的依赖注入器 设置依赖注入器Di\Di¶
-  
命名空间
Phalcon\Di
 -  
使用
Phalcon\Config\Adapter\PhpPhalcon\Config\Adapter\YamlPhalcon\Config\ConfigInterfacePhalcon\Di\DiInterfacePhalcon\Di\ExceptionPhalcon\Di\Exception\ServiceResolutionExceptionPhalcon\Di\InitializationAwareInterfacePhalcon\Di\InjectionAwareInterfacePhalcon\Di\ServicePhalcon\Di\ServiceInterfacePhalcon\Di\ServiceProviderInterfacePhalcon\Events\ManagerInterface
 -  
继承
 -  
实现
DiInterface
 
Phalcon\Di\Di 是一个实现服务依赖注入/服务定位的组件,同时它本身也是这些服务的容器。
由于Phalcon高度解耦,Phalcon\Di\Di 是整合框架不同组件的核心。开发者可以使用该组件来注入依赖并管理应用中不同类的全局实例。
基本上,这个组件实现了Inversion of Control模式。通过此模式,对象不通过setter或构造函数接收其依赖项,而是通过请求服务依赖注入器。这减少了整体复杂性,因为在组件内获取所需依赖项的方式只有一种。
此外,这种模式增加了代码的可测试性,从而降低了错误发生的可能性。
use Phalcon\Di\Di;
use Phalcon\Http\Request;
$di = new Di();
// Using a string definition
$di->set("request", Request::class, true);
// Using an anonymous function
$di->setShared(
    "request",
    function () {
        return new Request();
    }
);
$request = $di->getRequest();
属性¶
/**
 * List of registered services
 *
 * @var ServiceInterface[]
 */
protected $services;
/**
 * List of shared instances
 *
 * @var array
 */
protected $sharedInstances;
/**
 * Events Manager
 *
 * @var ManagerInterface|null
 */
protected $eventsManager;
/**
 * Latest DI build
 *
 * @var DiInterface|null
 */
protected static $defaultDi;
方法¶
魔术方法,用于通过setter/getter获取或设置服务。 Phalcon\Di\Di 构造函数。public function attempt( string $name, mixed $definition, bool $shared = bool ): ServiceInterface | bool;
文件中的服务可以指定如下:
return [
     'myComponent' => [
         'className' => '\Acme\Components\MyComponent',
         'shared' => true,
     ],
     'group' => [
         'className' => '\Acme\Group',
         'arguments' => [
             [
                 'type' => 'service',
                 'service' => 'myComponent',
             ],
         ],
     ],
     'user' => [
         'className' => '\Acme\User',
     ],
];
@link https://docs.phalcon.io/latest/di/
从yaml文件加载服务。$di->loadFromYaml(
    "path/services.yaml",
    [
        "!approot" => function ($value) {
            return dirname(__DIR__) . $value;
        }
    ]
);
文件中的服务可以指定如下:
myComponent:
    className: \Acme\Components\MyComponent
    shared: true
group:
    className: \Acme\Group
    arguments:
        - type: service
          name: myComponent
user:
   className: \Acme\User
@link https://docs.phalcon.io/latest/di/
使用数组语法检查服务是否已注册。 允许使用数组语法获取共享服务。 允许使用数组语法注册共享服务。 使用数组语法从服务容器中移除服务。 注册一个服务提供者use Phalcon\Di\DiInterface;
use Phalcon\Di\ServiceProviderInterface;
class SomeServiceProvider implements ServiceProviderInterface
{
    public function register(DiInterface $di)
    {
        $di->setShared(
            'service',
            function () {
                // ...
            }
        );
    }
}
Di\DiInterface
¶
  -  
命名空间
Phalcon\Di
 -  
使用
ArrayAccess
 -  
继承
ArrayAccess -  
实现
 
Phalcon\Di\Di接口。
方法¶
public function attempt( string $name, mixed $definition, bool $shared = bool ): ServiceInterface | bool;
Di\Exception¶
-  
命名空间
Phalcon\Di
 -  
使用
 -  
继承
\Exception -  
实现
 
在Phalcon\Di中抛出的异常将使用此类。
Di\Exception\ServiceResolutionException¶
-  
命名空间
Phalcon\Di\Exception
 -  
使用
 -  
继承
\Phalcon\Di\Exception -  
实现
 
Phalcon\Di\Exception\ServiceResolutionException
Di\FactoryDefault¶
-  
命名空间
Phalcon\Di
 -  
使用
Phalcon\Filter\FilterFactory
 -  
继承
\Phalcon\Di\Di -  
实现
 
这是标准Phalcon\Di\Di的一个变体,默认情况下它会自动注册框架提供的所有服务。因此,开发人员无需单独注册每个服务,从而提供一个全栈框架。
方法¶
Phalcon\Di\FactoryDefault构造函数。Di\FactoryDefault\Cli¶
-  
命名空间
Phalcon\Di\FactoryDefault
 -  
使用
Phalcon\Di\FactoryDefaultPhalcon\Di\ServicePhalcon\Filter\FilterFactory
 -  
继承
FactoryDefault -  
实现
 
Phalcon\Di\FactoryDefault\Cli
这是标准Phalcon\Di的一个变体,默认情况下它会自动注册框架提供的所有服务。因此,开发人员无需单独注册每个服务。此类特别适合CLI应用程序。
方法¶
Phalcon\Di\FactoryDefault\Cli构造函数。Di\InitializationAwareInterface
¶
  -  
命名空间
Phalcon\Di
 -  
使用
 -  
继承
 -  
实现
 
具有初始化功能的组件的接口。initialize()
方法¶
Di\Injectable
¶
  -  
命名空间
Phalcon\Di
 -  
使用
Phalcon\Di\DiPhalcon\Session\BagInterfacestdClass
 -  
继承
stdClass -  
实现
InjectionAwareInterface
 
该类允许通过访问与已注册服务同名的公共属性来访问服务容器中的服务。
@property \Phalcon\Mvc\Dispatcher|\Phalcon\Mvc\DispatcherInterface $dispatcher @property \Phalcon\Mvc\Router|\Phalcon\Mvc\RouterInterface $router @property \Phalcon\Mvc\Url|\Phalcon\Mvc\Url\UrlInterface $url @property \Phalcon\Http\Request|\Phalcon\Http\RequestInterface $request @property \Phalcon\Http\Response|\Phalcon\Http\ResponseInterface $response @property \Phalcon\Http\Response\Cookies|\Phalcon\Http\Response\CookiesInterface $cookies @property \Phalcon\Filter\Filter $filter @property \Phalcon\Flash\Direct $flash @property \Phalcon\Flash\Session $flashSession @property \Phalcon\Session\ManagerInterface $session @property \Phalcon\Events\Manager|\Phalcon\Events\ManagerInterface $eventsManager @property \Phalcon\Db\Adapter\AdapterInterface $db @property \Phalcon\Encryption\Security $security @property \Phalcon\Encryption\Crypt|\Phalcon\Encryption\Crypt\CryptInterface $crypt @property \Phalcon\Html\TagFactory $tag @property \Phalcon\Html\Escaper|\Phalcon\Html\Escaper\EscaperInterface $escaper @property \Phalcon\Annotations\Adapter\Memory|\Phalcon\Annotations\Adapter $annotations @property \Phalcon\Mvc\Model\Manager|\Phalcon\Mvc\Model\ManagerInterface $modelsManager @property \Phalcon\Mvc\Model\MetaData\Memory|\Phalcon\Mvc\Model\MetadataInterface $modelsMetadata @property \Phalcon\Mvc\Model\Transaction\Manager|\Phalcon\Mvc\Model\Transaction\ManagerInterface $transactionManager @property \Phalcon\Assets\Manager $assets @property \Phalcon\Di\Di|\Phalcon\Di\DiInterface $di @property \Phalcon\Session\Bag|\Phalcon\Session\BagInterface $persistent @property \Phalcon\Mvc\View|\Phalcon\Mvc\ViewInterface $view
属性¶
方法¶
魔术方法 __get 魔术方法 __isset 返回内部的依赖注入器 设置依赖注入器Di\InjectionAwareInterface
¶
  -  
命名空间
Phalcon\Di
 -  
使用
 -  
继承
 -  
实现
 
使用内部 Phalcon\Di\Di 创建它们的类必须实现此接口
方法¶
返回内部的依赖注入器 设置依赖注入器Di\Service¶
-  
命名空间
Phalcon\Di
 -  
使用
ClosurePhalcon\Di\Exception\ServiceResolutionExceptionPhalcon\Di\Service\Builder
 -  
继承
 -  
实现
ServiceInterface
 
表示服务容器中的单个服务
$service = new \Phalcon\Di\Service(
    "request",
    \Phalcon\Http\Request::class
);
$request = service->resolve();
属性¶
/**
 * @var mixed
 */
protected $definition;
/**
 * @var bool
 */
protected $resolved = false;
/**
 * @var bool
 */
protected $shared = false;
/**
 * @var mixed|null
 */
protected $sharedInstance;
方法¶
Phalcon\Di\Service 返回服务定义 返回特定位置的参数 如果服务已被解析,则返回 true 检查服务是否共享 解析服务 设置服务定义 在不解析服务的情况下更改定义中的参数 设置服务是否共享 设置/重置与服务相关的共享实例Di\Service\Builder¶
-  
命名空间
Phalcon\Di\Service
 -  
使用
Phalcon\Di\DiInterfacePhalcon\Di\Exception
 -  
继承
 -  
实现
 
Phalcon\Di\Service\Builder
该类基于复杂定义构建实例
方法¶
使用复杂的服務定義來構建服務Di\ServiceInterface
¶
  -  
命名空间
Phalcon\Di
 -  
使用
 -  
继承
 -  
实现
 
表示服务容器中的一个服务
方法¶
返回服务定义 返回特定位置的参数 如果服务已被解析,则返回 true 检查服务是否共享 解析服务 设置服务定义 在不解析服务的情况下更改定义中的参数 设置服务是否共享Di\ServiceProviderInterface
¶
  -  
命名空间
Phalcon\Di
 -  
使用
 -  
继承
 -  
实现
 
应由服务提供者或注册服务到服务容器的类似组件实现
namespace Acme;
use Phalcon\Di\DiInterface;
use Phalcon\Di\ServiceProviderInterface;
class SomeServiceProvider implements ServiceProviderInterface
{
    public function register(DiInterface $di)
    {
        $di->setShared(
            'service',
            function () {
                // ...
            }
        );
    }
}