2016-09-22 105 views
0

我想弄清楚如何在Symfony3中使用Ldap类。我已经成功创建并绑定了一个连接,但是我无法在查询中获得任何结果。为了确保查询真正有效,我运行了一个纯php版本:香草php ldap查询的作品。 Symfony 3 ldap查询失败。为什么?

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

正如你在做'$ output-> toArray()'时没有显示什么东西? Symfony LDAP查询返回一个集合类。 – ChadSikorra

+0

@ChadSikorra我使用Twig'dump'函数来显示集合。入口计数为0。 – dnagirl

回答

0

reposted Symfony github上的这个问题。 @ChadSikorra也在那里。他明确表示我的问题。以下是他的解释:

如果你看一下集合类中,没有对结果 资源做,直到初始化()被调用的类。如果你做 返回数组('output'=> array('bare'=> $ bare,'symfony'=> $ symf-> toArray()));它会调用初始化,您将看到在该类中填充的 条目。除非有其他事情要去 。

0

你还在使用最新的3.1+版本遇到这个问题吗?

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

正如@ChadSikorra所说的,你应该使用生成的Collection类的toArray()方法,否则你应该直接迭代结果。

实现的目的是以一种内存有效的方式遍历结果,默认情况下不会将所有结果存储在数组中,但toArray()方法可以为您执行此操作。在幕后,它实际上使用适当的PHP函数(iterator_to_array)将生成的itératif转换为数组。

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

干杯!