heristop / webservice-bundle
This bundle allows to synchronize a table with a soap webservice.
Requires
- symfony/framework-bundle: ~2.1
- zendframework/zend-soap: 2.0.*
This package is not auto-updated.
Last update: 2025-02-01 18:36:57 UTC
README
This bundle allows to synchronize a table with a soap webservice.
Installation
Download sources from github:
[HeriJobQueueBundle] git=https://github.com/heristop/HeriWebServiceBundle.git target=/bundles/Heri/WebServiceBundle/
Or use composer adding the requirement below:
{ "require": { "heristop/webservice-bundle": "*" } }
Register namespace in autoload:
$loader->registerNamespaces(array( ... 'Heri' => __DIR__.'/../vendor/bundles', ));
Load in AppKernel:
$bundles[] = new Heri\WebServiceBundle\HeriWebServiceBundle();
Usage
First, add the column toUpdate in your entity definition. This field will be set to false after the synchronization:
/** * @ORM\Column(name="to_update", type="boolean") */ protected $toUpdate;
Generate getters and setters:
app/console doctrine:generate:entities %YourBundle%
Create a class in %YourBundle%/Service directory to apply the mapping with the WSDL. The bundle contains an example:
namespace Heri\Bundle\WebServiceBundle\Service; use Heri\Bundle\WebServiceBundle\ClientSoap\ClientObject; class Sample extends ClientObject { public function configure() { $this->name = 'sample'; $this->table = 'HeriWebServiceBundle:Sample'; $this->func = 'addSample'; } public function hydrate($record) { $this->params = array( 'id' => $record->getId(), 'label' => $record->getLabel(), ); } }
Configure the webservices connection in config.yml:
heri_web_service: namespaces: [ %YourBundleNamespace%\Service ] authentication: # optional login: %login% password: %password% webservices: brand: name: brand url: %soap_url% authentication: true # optional
Then, use this command to call a webservice and retrieve all the records with toUpdate to true:
app:console webservice:load %Service%
To see the list of available functions add list option.
Configuration
Edit config.yml to add SyncListener:
services: sync.listener: class: Heri\Bundle\WebServiceBundle\Listener\SyncListener tags: - { name: doctrine.event_listener, event: prePersist, connection: default } - { name: doctrine.event_listener, event: postPersist, connection: default }
JobQueue
This bundle can be used with HeriJobQueueBundle to manage multiple webservice connections.
Override configuration and add the depedency to jobqueue service in config.yml:
services: sync.listener: class: Heri\Bundle\WebServiceBundle\Listener\SyncListener arguments: [@jobqueue] tags: - { name: doctrine.event_listener, event: prePersist, connection: default } - { name: doctrine.event_listener, event: postPersist, connection: default } jobqueue: class: Heri\Bundle\JobQueueBundle\Service\QueueService arguments: [@logger] tags: - { name: monolog.logger, channel: jobqueue }
Add a method called synchronize() in the object which return the name of queue:
/** * Adds synchronization in specified queue * * @return string */ public function synchronize() { return '%queue_name%'; }
When the record will be saved in database, the synchronization to the webservice will be pushed in queue.
Note
You can override the ClientObject class in order to apply a specific configuration.
The example below shows the method to connect your application to a Magento plateform:
heri_web_service: namespaces: [ %YourBundleNamespace%\Service ] authentication: login: sampleuser password: 123456 webservices: magento: name: api url: http://myshop-local.com/index.php/api/
abstract class ClientMagento extends ClientObject { protected $name = 'api'; protected function callFunction($func, array $params = array()) { $connection = $this->getContainer()->getConnection(); $sessionId = $this->client->login($connection->getLogin(), $connection->getPassword()); return $this->client->call( $sessionId, $func, $params ); } }