0

有没有办法通过服务定义来设置公共变量 services.yml

原因是,我正在使用phpbrowscap 库。要使用本地文件来解析浏览器,我需要使用这行代码:

$this->browscap->localFile = "..."

不幸的是,这个可怜的财产是公共的,没有二传手。它在构造函数中都不可用。

那么我将如何设置这个属性services.yml呢?这甚至有可能实现吗?

这是我的部分services.yml

browscap:
        class: Browscap
        arguments:
            - %browscap_cache_dir%

如果有一个二传手,我会在call那里添加......但是......

4

2 回答 2

6

你试过使用property injectionDI-Container 的方法吗?

https://symfony.com/doc/current/service_container/injection_types.html#property-injection

app.newsletter_manager:
     class: AppBundle\Mail\NewsletterManager
     properties:
         mailer: '@mailer'
于 2017-07-24T09:52:53.867 回答
2

您可以使用 Factory 来配置服务实例:

services:
    # ...

    browscap:
        factory:   'AppBundle\Service\BrowscapStaticFactory:createBrowscap'
        arguments: ['%browscap_cache_dir%']

工厂类:

class BrowscapStaticFactory
{
    public static function createBrowscap($cacheDir)
    {
        $browscap = new Browscap();
        $browscap->localFile = $cacheDir;

        // ...

        return $browscap;
    }
}
于 2017-07-24T09:56:59.550 回答