【问题标题】:vanilla php ldap query works. Symfony 3 ldap query fails. Why?vanilla php ldap 查询有效。 Symfony 3 ldap 查询失败。为什么?
【发布时间】:2016-09-22 20:17:48
【问题描述】:

我试图弄清楚如何在 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 查询的选项相同时会失败吗?

【问题讨论】:

  • 当您执行$output->toArray() 时没有显示任何内容? Symfony LDAP 查询返回一个集合类。
  • @ChadSikorra 我使用 Twig dump 函数来显示集合。条目数为 0。

标签: ldap symfony ldap-query


【解决方案1】:

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

如果你查看集合类,结果什么也没做 资源,直到在类中调用 initialize()。如果你这样做 return array('output' => array('bare' => $bare, 'symfony' => $symf->toArray()));它会调用初始化,你会看到 类中填充的条目。除非有其他事情发生 开。

【讨论】:

【解决方案2】:

您在使用最新的 3.1+ 版本时仍然遇到此问题吗?

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

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

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

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

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多