Обработка исключений в Symfony 2 Crawler

У меня есть этот код

   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

Решение

Нигде в документации не указано, что InvalidArgumentException если это ничего не соответствует:

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

Единственное исключение, которое может быть брошено, это RuntimeException если вы не установили Symfony’s CssSelector. Так что в вашем случае исключение никогда не будет выброшено.

Вместо этого вы ищете count() метод (который находится на базе SplObjectStorage учебный класс. Таким образом, вы можете проверить, если таковые возвращаются с:

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

Вы также можете просто сделать

if ($totalpages->count())
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]