Symfony 服务:有没有办法在 `services.yml` 中设置 public 属性?
Symfony Services: Is there a way to set a public property in `services.yml`?
有没有办法通过 services.yml
中的服务定义来设置 public 变量?
原因是,我正在使用 phpbrowscap library。要使用本地文件解析浏览器,我需要使用这行代码:
$this->browscap->localFile = "..."
unfortunately this poor property is public and does not have a setter. it's neither available in constructor.
那么我如何在 services.yml
中设置这个 属性?这甚至有可能实现吗?
这是我的部分 services.yml
:
browscap:
class: Browscap
arguments:
- %browscap_cache_dir%
如果有 setter 我会添加 call
那里...但是好吧...
您是否尝试过使用 DI-Container 的 property injection
方法?
https://symfony.com/doc/current/service_container/injection_types.html#property-injection
app.newsletter_manager:
class: AppBundle\Mail\NewsletterManager
properties:
mailer: '@mailer'
您可以使用 Factory 来配置服务实例:
services:
# ...
browscap:
factory: 'AppBundle\Service\BrowscapStaticFactory:createBrowscap'
arguments: ['%browscap_cache_dir%']
工厂class:
class BrowscapStaticFactory
{
public static function createBrowscap($cacheDir)
{
$browscap = new Browscap();
$browscap->localFile = $cacheDir;
// ...
return $browscap;
}
}
有没有办法通过 services.yml
中的服务定义来设置 public 变量?
原因是,我正在使用 phpbrowscap library。要使用本地文件解析浏览器,我需要使用这行代码:
$this->browscap->localFile = "..."
unfortunately this poor property is public and does not have a setter. it's neither available in constructor.
那么我如何在 services.yml
中设置这个 属性?这甚至有可能实现吗?
这是我的部分 services.yml
:
browscap:
class: Browscap
arguments:
- %browscap_cache_dir%
如果有 setter 我会添加 call
那里...但是好吧...
您是否尝试过使用 DI-Container 的 property injection
方法?
https://symfony.com/doc/current/service_container/injection_types.html#property-injection
app.newsletter_manager:
class: AppBundle\Mail\NewsletterManager
properties:
mailer: '@mailer'
您可以使用 Factory 来配置服务实例:
services:
# ...
browscap:
factory: 'AppBundle\Service\BrowscapStaticFactory:createBrowscap'
arguments: ['%browscap_cache_dir%']
工厂class:
class BrowscapStaticFactory
{
public static function createBrowscap($cacheDir)
{
$browscap = new Browscap();
$browscap->localFile = $cacheDir;
// ...
return $browscap;
}
}