Intereting Posts
Лучшая практика по окончанию if … else statement без дополнительного условия Настройка cookie для использования cURL Вызовите функцию Ajax из PHP foreach с формой Скрыть объявление XML в файлах, сгенерированных с помощью PHP Отобразить элемент, выбранный конкретным пользователем на странице состояния для этого конкретного пользователя. Чтение данных из fsockopen с использованием fgets / fread hangs PHP получает выпадающее значение и текст Symfony2 twig code не работает в шаблоне xml, поскольку он работает в html вставка в разные таблицы через один запрос mysql Обслуживание относительных изображений с использованием Преобразование новой строки в отправленный текст в PHP Использование «Neoxygen / Neoclient» в качестве ServiceProvider + Facade в Laravel 5.1 Какой метод обнаружения режима запуска php-скрипта является более надежным? ищет простой способ множественного шифрования PHP Водяной знак на анимированном gif с php

Испытательное соединение Laravel с SOAP WDSL и обработка исключений

Я использую структуру laravel, и я хочу проверить, было ли соединение с Soap-сервером успешным или нет, без приложения, которое умирает с фатальной ошибкой.

И это:

$this->client = @new SoapClient("http://some.url/test.wsdl"); $this->session = $this->client->login("username", "password"); if (is_soap_fault($this->session)) { return "Error"; } 

И это:

 try { $this->client = @new SoapClient("http://some.url/test.wsdl"); $this->session = $this->client->login("username", "password"); } catch (SoapFault $e) { return "Error"; } 

Результат фатальной ошибки:

 Symfony \ Component \ Debug \ Exception \ FatalErrorException SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://some.url/test.wsdl' : failed to load external entity "http://some.url/test.wsdl" 

благодаря

Сегодня я тоже столкнулся с этой проблемой. Проблема заключается в том, что обработчик ошибок Laravel интерпретирует эту уязвимую ошибку как фатальную ошибку и прерывает программу в результате.

Чтобы противостоять этому, вам необходимо перехватить ошибку до внутреннего обработчика ошибок Laravel. Этот метод варьируется в зависимости от вашей версии Laravel:

Laravel 4. *

  1. Перейдите в файл globals.php . Это должно быть в папке app\start\ .
  2. Добавьте следующий код ( Спасибо dmgfjaved ):

     App::fatal(function($exception) { //If SOAP Error is found, we don't want to FATALLY crash but catch it instead if(strpos($exception->getMessage(), 'SOAP-ERROR') !== FALSE) { return ''; } }); 

Laravel 5. *

  1. Файл globals.php отсутствует. Все вызовы IoC обрабатываются через ServiceProviders . Перейдите в app\Providers\AppServiceProvider.php .
  2. Найдите функцию render() .
  3. Добавьте следующий код перед return parent::render($request, $e);

     if(strpos($e->getMessage(), 'SOAP-ERROR') !== false) { return false; } 

Это приведет к удалению типа ошибки SoapFault из обработчика ошибок. Не забудьте поймать SoapFault, поскольку Laravel не будет!

Вот как я получил мыло для работы в Laravel 5.1

  1. чистая установка laravel 5.1

  2. установить artisaninweb / laravel-soap

  3. создать контроллер SoapController.php

     <?php namespace App\Http\Controllers; use Artisaninweb\SoapWrapper\Facades\SoapWrapper; class SoapController extends Controller { public function demo() { // Add a new service to the wrapper SoapWrapper::add(function ($service) { $service ->name('currency') ->wsdl('http://currencyconverter.kowabunga.net/converter.asmx?WSDL') ->trace(true); }); $data = [ 'CurrencyFrom' => 'USD', 'CurrencyTo' => 'EUR', 'RateDate' => '2014-06-05', 'Amount' => '1000' ]; // Using the added service SoapWrapper::service('currency', function ($service) use ($data) { var_dump($service->getFunctions()); var_dump($service->call('GetConversionAmount', [$data])->GetConversionAmountResult); }); } } 
  4. Создайте маршрут на своих маршрутах.

    Route::get('/demo', ['as' => 'demo', 'uses' => 'SoapController@demo']);

@Adam Link предоставил хороший подсказку, но в Laravel 5.1 появилось stha tthere больше не метод рендеринга в AppServiceProvider.

Вместо этого он был перенесен в приложение \ Exceptions \ Handler.php