2016-09-22 8 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'; 
    } 

結果の期待数を返します。

//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クエリは、すべてのオプションが、私は裸のために使用されるものと同一でなければならない時に失敗した理由を任意のアイデアを:一方で、symfonyの3のLDAPコンポーネントで行われ、このクエリが0の結果を返します

PHPのクエリ?

+0

'$ output-> toArray()'と同じように何も表示されません。 Symfony LDAPクエリはコレクションクラスを返します。 – ChadSikorra

+0

@ChadSikorra私はTwig 'dump'関数を使ってコレクションを表示します。エントリ数は0です。 – dnagirl

答えて

0

I repostedこの質問はSymfony githubにあります。 @ChadSikorraもそこにいました。そして、彼は私の問題が何だったのかを明確にしました。

コレクションクラスを見ると、クラス内でinitialize()が呼び出されるまで、結果の リソースは何も行われません。 return array( 'output' =>配列( 'bare' => $ bare、 'symfony' => $ symf-> toArray()));それがinitializeを呼び出すと、クラスに入力された エントリが表示されます。他に何かが進まない限り、 がオンになります。

0

最新の3.1以上のバージョンでこの問題が引き続き発生しますか?

申し訳ありませんが、私は非常に頻繁にスタックオーバーフローに行くとGithubに私の時間のほとんどを費やしていないので、私は前にあなたの質問が表示されませんでした。

@ChadSikorraによると、結果のCollectionクラスのtoArray()メソッドを使用する必要があります。そうしないと、結果を直接反復処理する必要があります。

デフォルトではすべての結果を配列に格納せずに結果をメモリ効率のよい方法でトラバースするように実装されていますが、toArray()メソッドでこれを行うことができます。実際には、適切なPHP関数(iterator_to_array)を使用して、結果として得られるitératifを実際に配列に変換します。

ところで、イテレータとtoArray()関数の呼び出しには矛盾がありましたが、最近のバージョンでは修正されています。

乾杯!

関連する問題