Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SOAP obsługa błędów
Forum PHP.pl > Forum > PHP
wariat12
Witam, mam kod, który łączy się z API za pomocą SOAP

  1. $soap = new SoapClient(null, array('location' => 'http://xx/server.php?wsdl', 'uri' => ' '));


a następnie wywołuję funkcję, która pobiera dane:
  1. $wynik = $soap->pobierz('kod', $id, $i);


Funkcja działa w pętli, gdyż wywoływana jest dla sporej ilości informacji, niestety w systemie są id, które nie istnieją i w momencie, gdy zmienna $id właśnie na coś takiego trafi, to wyrzuca błąd:

  1. Fatal error: Uncaught SoapFault exception: [1] brak id w systemie in [HTTP] Stack trace: #0 [HTTP]: SoapClient->__call('pobierz', Array) #1 [HTTP]: SoapClient->pobierz('xx...', 15746) #2 {main} thrown in [HTTP] on line 15


Jak podejść do tematu, żeby po prostu brakujące id były pomijane?
nospor
try... catch.... ?
LowiczakPL
  1. if (isset($id)) { $wynik = $soap->pobierz('kod', $id, $i); }
nospor
@LowiczakPL problemem bylo ze w systemie nie ma id zawartego w zmiennej $id a nie ze zmienna $id nie byla ustawiona
LowiczakPL
czy w takim razie wysłanie 'exceptions' => false nie zignoruje błędu ?
nospor
Nawet jesli tak, to zniweluje to rowniez inne exceptions przy innej okazji, ktore wypadaloby moze jednak otrzymywac.
try...catch... wydaje sie najlepszym rozwiazaniem, bo robisz wtedy co chcesz i jak chcesz.
LowiczakPL
to proponuję jeszcze http://php.net/manual/en/function.is-soap-fault.php
nospor
A co ty tak wyjatkow nie lubisz? wink.gif
LowiczakPL
Ależ to jest z obsługą wyjątków.

  1. <?php
  2. try {
  3. $client = new SoapClient("some.wsdl");
  4. $result = $client->SomeFunction(/* ... */);
  5. } catch (SoapFault $fault) {
  6. trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
  7. }
  8. ?>
nospor
No wlasnie nie. Sam podales is-soap-fault() a to wlasnie jest po to by nie miec wyjatkow
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.