Клиент SOAP — класс не найден

У меня проблема с использованием клиента SOAP в Laravel. Я хочу отправить продавцов / клиентов из магазина в систему ERP. Структура выглядит так: В routes->web.php Я звоню своему контроллеру

Route::get('/show_orders', 'SalesOrdersController@store');

Я создал контроллер SalesOrderController и это выглядит так

<?php

namespace App\Http\Controllers;

class SalesOrdersController extends Controller
{
private $soapClient;
public function __construct()
{
$this->middleware('auth');

$this->soapClient = app('soap_client_sales_order');
}
public function store()
{

$soapClient->__setLocation(env('BYD_DOMAIN') . $serviceUrl);

$parameters['BasicMessageHeader'] = array(
'ID' => '00000000000102dcade9bcb0aa000c68',
);

$parameters['Customer'] = array(
'CategoryCode' => '1',
'CustomerIndicator' => 'true',
'Person' => array(
'GivenName' => 'Frank',
'FamilyName' => 'Sent',
),
);

$soapResult = $this->soapClient->MaintainBundle_V1($parameters);
}
}

Я создал ServiceProvider SoapServiceProvider — выглядит так:

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class SoapServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('soap_client_sales_order', function () {
$serviceUrl = '/sap/bc/srt/scs/sap/managecustomerin1';
$wsdlPath = 'soap/managecustomerin1.wsdl';
$soapClient = new \SoapClient(
storage_path($wsdlPath),
array(
'trace' => 1,
'soap_version' => SOAP_1_2,
'exceptions' => 1,
'login' => env('SOAP_USER'),
'password' => env('SOAP_PASSWORD'),
)
);
});
$soapClient->__setLocation(env('BYD_DOMAIN') . $serviceUrl);
return $soapClient;
}
}

Когда я называю свой маршрут Http: //shop.test/show_orders Я получаю следующее

Исключение: «Класс soap_client_sales_order не существует»

Dump:

/home/vagrant/code/shop/vendor/laravel/framework/src/Illuminate/Container/Container.php
}

/**
* Instantiate a concrete instance of the given type.
*
* @param  string  $concrete
* @return mixed
*
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
public function build($concrete)
{
// If the concrete type is actually a Closure, we will just execute it and
// hand back the results of the functions, which allows functions to be
// used as resolvers for more fine-tuned resolution of these objects.
if ($concrete instanceof Closure) {
return $concrete($this, $this->getLastParameterOverride());
}

$reflector = new ReflectionClass($concrete);

// If the type is not instantiable, the developer is attempting to resolve
// an abstract type such as an Interface of Abstract Class and there is
// no binding registered for the abstractions so we need to bail out.
if (! $reflector->isInstantiable()) {
return $this->notInstantiable($concrete);
}

$this->buildStack[] = $concrete;

$constructor = $reflector->getConstructor();

// If there are no constructors, that means there are no dependencies then
// we can just resolve the instances of the objects right away, without
// resolving any other types or dependencies out of these containers.

Надеюсь, вы можете дать мне подсказку.

Спасибо,

Manu

0

Решение

Ну, во-первых, вы никогда не определились $soapClient вне $app->singleton сфера так $soapClient был нулевым, и это было неправильно singleton implementationвот официальный гид из документов Laravel и следующее, что ты должен return синглтон внутри singleton scope имея в виду что-то вроде этого

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton('soap_client_sales_order', function () {
...
...

$soapClient->__setLocation(env('BYD_DOMAIN') . $serviceUrl);
return $soapClient;
});
}
0

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

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector