Контроллер Zend Action не может быть вызван - PullRequest
0 голосов
/ 01 марта 2019

Я хочу создать приложение Zend-3-MVC, которое может обрабатывать запросы SOAP.Поэтому он должен действовать как SOAP-сервер.

Прежде всего я создал следующий контроллер:

<?php

namespace MyProject\Controller;



use Zend\Mvc\Controller\AbstractActionController;

use Zend\Soap\AutoDiscover as WsdlAutoDiscover;

use Zend\Soap\Server as SoapServer;



class SoapController extends AbstractActionController

{

    public function wsdlAction()

    {

        $request = $this->getRequest();



        $wsdl = new WsdlAutoDiscover();

        $this->populateServer($wsdl);



        $response = $this->getResponse();

        $response->getHeaders()->addHeaderLine('Content-Type', 'application/wsdl+xml');

        $response->setContent($wsdl->toXml());



        return $response;

    }



    public function serverAction()

    {

        $request = $this->getRequest();



        $server = new SoapServer(

            $this->url()

                ->fromRoute('soap/wsdl', [], ['force_canonical' => true]),

            [

                'actor' => $this->url()

                    ->fromRoute('soap/server', [], ['force_canonical' => true]),

            ]

        );

        $server->setReturnResponse(true);

        $this->populateServer($server);



        $soapResponse = $server->handle($request->getContent());



        $response = $this->getResponse();

        $response->getHeaders()->addHeaderLine('Content-Type', 'application/soap+xml');

        $response->setContent($soapResponse);



        return $response;

    }

}

И это мой router.global.php в config / autoload:

<?php
use Zend\Router\Http\Literal;

return [
    'router' => [
        'routes' => [
            'soap' => [
                'type' => Literal::class,
                'options' => [
                    'route' => '/soap',
                ],
                'may_terminate' => false,
                'child_routes' => [
                    'wsdl' => [
                        'type' => Literal::class,
                        'options' => [
                            'route' => '/wsdl',
                            'defaults' => [
                                'controller' => \MyProject\Controller\SoapController::class,
                                'action' => 'wsdl',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                ],
            ],
        ],
    ],
];

И теперь я делаю SOAP GET запрос к

https://example.com/soap/wsdl

Но маршрут не может быть решен.Я ожидаю, что метод wsdlAction вызывается, но я получаю только 404.

1 Ответ

0 голосов
/ 05 марта 2019

Вам также необходимо зарегистрировать свой контроллер.

use Zend\ServiceManager\Factory\InvokableFactory;

'controllers' => [
        'factories' => [
            MyProject\Controller\SoapController::class => InvokableFactory::class            
        ],
    ],

Итак, теперь ваш код должен быть:

use Zend\Router\Http\Literal;
use Zend\ServiceManager\Factory\InvokableFactory;
    return [
        'controllers' => [
                'factories' => [
                    MyProject\Controller\SoapController::class => InvokableFactory::class            
                ],
            ],
        'router' => [
            'routes' => [
                'soap' => [
                    'type' => Literal::class,
                    'options' => [
                        'route' => '/soap',
                    ],
                    'may_terminate' => false,
                    'child_routes' => [
                        'wsdl' => [
                            'type' => Literal::class,
                            'options' => [
                                'route' => '/wsdl',
                                'defaults' => [
                                    'controller' => MyProject\Controller\SoapController::class,
                                    'action' => 'wsdl',
                                ],
                            ],
                            'may_terminate' => true,
                        ],
                    ],
                ],
            ],
        ],
    ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...