2014-09-17 3 views
0

Я работаю над своим первым «настоящим» проектом Symfony, который является SOAP api. Я нашел BeSimple SoapBundle, и я хочу добавить к нему несколько сложных типов, которые, похоже, не поддерживаются пакетом. Среди других, я хочу, чтобы переопределить следующую функцию, которая находится в классе Dumper:Расширение пакетов в Symfony2 BeSimpleSoapBundle

protected function addComplexType(ComplexType $type) 
{ 

} 

Он находится здесь: besimple/мыльный WSDL/BeSimple/SoapWsdl/Самосвал/dumper.php

То, что я сделал это следующие.

Я создал SRC/Webstuff/SoapBundle/SoapWsdl/Самосвал/dumper.php

содержит:

<?php 
namespace Webstuff\SoapBundle\SoapWsdl\Dumper; 

use BeSimple\SoapWsdl\Dumper as BaseDumper; 
use BeSimple\SoapCommon\Definition\Definition; 

class Dumper extends BaseDumper 
{ 

    public function __construct(Definition $definition, array $options = array()) 
    { 
     echo 'CHECK'; 
     exit; 
    } 

} 

?> 

Я также добавил это к WebstuffSoapBundle.php

public function getParent(){ 
    return 'BeSimpleSoapBundle'; 
} 

Когда вы посещаете мой wsdl-путь, я ожидаю увидеть CHECK. Но это просто загрузка wsdl, поэтому эта настройка не работает. Я совершенно новичок в Symfony, поэтому я мог бы пропустить что-то очевидное.

Надеюсь, кто-то может дать мне толчок в правильном направлении! Благодаря!

ответ

0

Вам нужно: I. Продлить WebServiceContext (находится как: besimple/мыло/SRC/BeSimple/SoapBundle/WebServiceContext.php), с тем чтобы иметь возможность использовать дампера в методе "getWsdlFile" вместо родительского самосвала.

т.д .:

<?php 
//Overriding WebServiceContext 

namespace Webstuff\SoapBundle; 

use Webstuff\SoapBundle\SoapWsdl\Dumper\Dumper; 
use Symfony\Component\Config\ConfigCache; 

class WebServiceContext extends \BeSimple\SoapBundle\WebServiceContext 
{ 
private $options; 

public function __construct($loader, $converters, $options) 
{ 
    $this->options = $options; 
    return parent::__construct($loader,$converters,$options); 
} 

public function getWsdlFile($endpoint = null) 
{ 
    $file  = sprintf ('%s/%s.%s.wsdl', $this->options['cache_dir'], $this->options['name'], md5($endpoint)); 

    $cache = new ConfigCache($file, $this->options['debug']); 
    if(!$cache->isFresh()) { 
     $definition = $this->getServiceDefinition(); 

     if ($endpoint) { 
      $definition->setOption('location', $endpoint); 
     } 

     $dumper = new Dumper($definition, array('stylesheet' => $this->options['wsdl_stylesheet'])); 

     $cache->write($dumper->dump()); 
    } 
    return (string) $cache; 
} 
} 
?php> 

II. Установите параметр «besimple.soap.context.class» в config.yml, чтобы обратиться к вашему классу, который расширяет WebServiceContext.

т.д .:

# app/config/config.yml 
parameters: 
besimple.soap.context.class: "Webstuff\SoapBundle\WebServiceContext" 
Смежные вопросы