2016-09-22 69 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()函數調用之間有一些不一致,但在最近的版本中已經修復。

乾杯!