Symfony2 DomCrawler每个循环,都不会将新的StdClass对象添加到循环外的对象

时间:2014-05-30 00:14:11

标签: php symfony dom laravel

    use Goutte\Client;

    $results = new StdClass;

    $client = new Client();
    $crawler = $client->request('GET', $url);
    $crawler->filter('.div')->each(function ($node) 
    {
        $item = new StdClass;
        $item->test = 'hello';

        $results->data[] = $item;
    });

    var_dump($results);

var_dump($results)的输出始终是一个完全空的对象:

object(stdClass)[176]

网址是正确的,过滤器是正确的,该类正在运行,但是如果我使用$node并从文本中提取HTML,则它在循环中工作,但数据不会保存在其中$results对象。

如上例所示,文字'你好'最终$item对象中甚至不存在$results类。

2 个答案:

答案 0 :(得分:7)

你可以试试这个:

$client = new Client();
$crawler = $client->request('GET', $url);
$results = $crawler->filter('.div')->each(function (Crawler $node, $i) {
    return $node->text();
});
var_dump($results);

检查Symfony website上的参考。

答案 1 :(得分:3)

您需要允许匿名函数访问本地变量,顺便说一下我没有看到您在封闭内使用$node

function ($node) use ($results)
{
    $item = new StdClass;
    $item->test = 'hello';

    $results->data[] = $item;
}