香草PHP ldap查询工作.查询Symfony 3 ldap失败.为什么



我想弄清楚如何在Symfony3中使用Ldap类。我已经成功地创建并绑定了一个连接,但我无法在查询上获得任何结果。为了确保查询实际工作,我运行了一个裸php版本:

    if($lconn = ldap_connect('ds.mydomain.ca')){
        ldap_set_option($lconn, LDAP_OPT_REFERRALS, 0);
        ldap_set_option($lconn, LDAP_OPT_PROTOCOL_VERSION, 3);
        if($lbind = ldap_bind($lconn,'webuser','password')){
            $filter  ="(&(sn=Smith)(givenname=J*))";
            if(!$result = ldap_search($lconn, "dc=ds, dc=mydomain, dc=ca", $filter)) throw Exception("Error in search query: ".ldap_error($lconn));
            $output = ldap_get_entries($lconn, $result);
        }else{
            $output='bind failed';
        }
    } else {
        $output= 'connection failed';
    }

返回预期的结果数。

另一方面,这个使用Symfony 3的Ldap组件完成的查询返回0结果:

//use SymfonyComponentLdapLdap
$ldap = Ldap::create('ext_ldap', array(
    'host' => 'ds.mydomain.ca',
    'version' => 3,
    'debug' => true,
    'referrals' => false,
));
$ldap->bind('webuser', 'password');
$q = $ldap->query("dc=ds, dc=nrc, dc=ca", "(&(sn=Smith)(givenname=J*))");
$output = $q->execute();

任何想法为什么Symfony ldap查询失败时,它的所有选项应该是相同的那些我用于裸php查询?

我在Symfony github上转发了这个问题。@ChadSikorra也在场。他明确指出了我的问题所在。以下是他的解释:

如果您查看集合类,结果没有任何处理资源,直到在类中调用initialize()。如果你知道返回array('output' => array('bare' => $bare, 'symfony' =>)symf -> toArray ()));它会调用initialize,你会看到类中填充的条目。除非有别的事情发生

在最新的3.1+版本中您还会遇到这个问题吗?

对不起,我不经常去Stack Overflow,我大部分时间都花在Github上,所以我之前没有看到你的问题。

正如@ChadSikorra所说,您应该使用结果Collection类的toArray()方法,或者您应该直接迭代结果。

这个实现是为了以一种内存高效的方式遍历结果,而不是在默认情况下将所有结果存储在数组中,但是toArray()方法可以为您做到这一点。在幕后,它实际上使用适当的PHP函数(iterator_to_array)将得到的itsamatratif转换为数组。

顺便说一下,迭代器和toArray()函数调用之间曾经有一些不一致,但在最近的版本中已经修复了。

干杯!

最新更新