Symfony 3 Datafixtures using parameter.yml values



我在User数据固定装置中使用LDAP,我不想对LDAP登录选项进行硬编码。最初,我尝试了这个:

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

但这没有用。我做了一些研究,意识到我需要将容器包含在我的灯具中。但是,在这一点上,我不确定我的下一步是什么。

据我了解,我需要使用容器,这是获取包含参数的服务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;
    }
}

您只需通过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')
    );

等。

相关内容

  • 没有找到相关文章

最新更新