使用parameter.yml值

时间:2017-03-30 02:45:51

标签: php symfony doctrine-orm symfony-3.2

我在我的User数据夹具中使用LDAP,我不想硬编码LDAP登录选项。最初,我试过这个:

$options = array(
            'host' => '%ldap_host%',
            'port' => '%ldap_port%',
            'useSsl' => true,
            'username' => '%ldap_username%',
            'password' => '%ldap_password%',
            'baseDn' => '%ldap_baseDn_users%'
        ); 

但那没用。我做了一些研究,并意识到我需要include the container in my fixtures。但是,就此而言,我不确定我的下一步是什么。

据我所知,我需要使用容器及其get方法来获取包含参数的服务,但我不知道那是什么:

$this->container->get('parameters');

不起作用,所以我想知道我应该使用什么。

我的完整数据包如下:

class LoadFOSUsers extends AbstractFixture implements OrderedFixtureInterface, ContainerAwareInterface
{
    /**
     * @var ContainerInterface
     */
    private $container;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }


    public function load(ObjectManager $manager)
    {
        $this->container->get('parameters');

        // Not sure how to access param values. 
        $options = array(
            'host' => '%ldap_host%',
            'port' => '%ldap_port%',
            'useSsl' => true,
            'username' => '%ldap_username%',
            'password' => '%ldap_password%',
            'baseDn' => '%ldap_baseDn_users%'
        );

        $ldap = new Ldap($options);
        $ldap->bind();

        $baseDn = '%ldap_baseDn_users%';
        $filter = '(&(&(ObjectClass=user))(samaccountname=*))';
        $attributes=['samaccountname', 'dn', 'mail','memberof'];
        $result = $ldap->searchEntries($filter, $baseDn, Ldap::SEARCH_SCOPE_SUB, $attributes);

        foreach ($result as $item) {
            echo $item["dn"] . ': ' . $item['samaccountname'][0] . PHP_EOL;
        }
    }

    public function getOrder()
    {
        // the order in which fixtures will be loaded
        // the lower the number, the sooner that this fixture is loaded
        return 8;
    }
}

1 个答案:

答案 0 :(得分:3)

您只需通过getParameter('name')从容器中取出它们,或通过getParameterBag()将它们全部收集起来。

所以:

    $options = array(
        'host' => $this->container->getParameter('ldap_host'),
        'port' => $this->container->getParameter('ldap_port'),
        'useSsl' => true,
        'username' => $this->container->getParameter('ldap_username'),
        'password' => $this->container->getParameter('ldap_password'),
        'baseDn' => $this->container->getParameter('ldap_baseDn_users')
    );