Symfony 2 Crawler中的异常处理

时间:2014-12-27 18:30:57

标签: php symfony exception-handling

我有这段代码

   try{

    $totalpages=$crawler->filter('.button-see-more');

        $totalpages=$totalpages->extract(array('data-total-pages'))[0];

        if($totalpages>0)
            for($i=1;$i<=$totalpages;$i++)
            {
                $client->request('GET', 'http://www.daraz.pk/catalog/getproducts/?pathInfo=phones%2Fqmobile&page='.$i.'&YII_CSRF_TOKEN='.$CSRF, array(), array(), array(
                    'HTTP_X-Requested-With' => 'XMLHttpRequest',
                ));
                echo $i.'th page: '.$client->getResponse()->getContent()."\r\n";
            }


}
catch (InvalidArgumentException $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}

根据文档页面

 $totalpages=$crawler->filter('.button-see-more');

当过滤器没有匹配任何形式时,它应该抛出一个未抛出的InvalidArgumentException,而不是在我得到的控制台中

  

PHP注意:未定义的偏移量:

中的0

我怎么能抓住这个?

1 个答案:

答案 0 :(得分:2)

在文档中没有任何地方声明如果它与任何内容不匹配,它会抛出InvalidArgumentException

https://github.com/symfony/dom-crawler/blob/2.6/Crawler.php#L675

如果您尚未安装Symfony的CssSelector,则唯一可以抛出的异常是RuntimeException。所以在你的情况下,永远不会抛出异常。

您正在寻找的是count()方法(位于基础SplObjectStorage类上。因此您可以测试是否返回任何方法:

if ($totalpages->count() > 0)

您也可以这样做

if ($totalpages->count())