我正在试图弄清楚如何在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 Symfony\Component\Ldap\Ldap
$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查询的选项相同?
答案 0 :(得分:1)
I reposted这个问题在Symfony github上。 @ChadSikorra也在那里。他明确表示我的问题是什么。这是他的解释:
如果查看集合类,结果不会执行任何操作 资源,直到在类中调用initialize()。如果你这样做 返回数组('输出' =>数组('裸' => $裸,' symfony' => $ symf->指定者()));它将调用initialize,你会看到 在类中填充的条目。除非有其他事情发生 上。
答案 1 :(得分:0)
最新的3.1+版本是否仍会遇到此问题?
很抱歉,我不经常使用Stack Overflow并将大部分时间花在Github上,所以我之前没有看到你的问题。
正如@ChadSikorra所说,你应该使用生成的Collection类的toArray()方法,或者你应该直接迭代结果。
实现是为了以高效内存的方式遍历结果,而不是默认情况下将所有结果存储在数组中,但toArray()方法可以为您执行此操作。在幕后,它实际上使用适当的PHP函数(iterator_to_array)将生成的itératif转换为数组。
顺便说一下,迭代器和toArray()函数调用之间曾经存在一些不一致,但在最近的版本中已经修复了。
干杯!