|  Download WsdlToPhp Package Generator                
 Package Generator eases the creation of a PHP package in order to call any SOAP oriented Web Service. Its purpose is to provide a full OOP approach to send SOAP requests using:
- PHP classes for parameters that match the Web Service parameter names
- PHP Service classes that match the operation names provided by the Web Service The generated package does not need PEAR nor NuSOAP, at least :
- PHP 5.3.3,
- SoapClient : natively installed with PHP,
- DOM : natively installed with PHP,
- PackageBase: automatically installed on standalone mode (default mode), it contains utility classes used by the generated classes. Full documentation about the classes is available at the project homepage. If you're not using the standalone mode, you must add `wsdltophp/packagebase: dev-master`in your main composer.json file. SummaryGenerated package hierarchy/Api
	/src
	    /ArrayType/: classes that contain one property which is an array of items
	    /EnumType/: classes that only contain constants, enumerations defined by the WSDL
	    /ServiceType/: classes that give access to the operations
	    /StructType/: any type that represents a request/response and their sub elements
	    /ClassMap.php: the class that defines the mapping between generated classes and declared structs
    /vendor/: automatically created by composer on standalone mode (default: true)
    /composer.json: automatically created by composer on standalone mode (default: true)
    /composer.lock: automatically created by composer on standalone mode (default: true)
    /tutorial.php: generated if ```--gentutorial``` option is enabled (default: true)
 OptionsThe generator comes with several options:
- Required package configuration: - \-\-urlorpath: path or url to get the WSDL
- \-\-destination: absolute path where the classes must be generated
- \-\-composer-name: must be present to define the composer name in the generated package's composer.json file (only on standalone mode, see standalone option)
- \-\-force: must be present to generate the package, otherwise you'll get the debug informations
 
_Optional_ generated class naming:
- \-\-prefix: the classes name prefix, used as the main namespace
- \-\-suffix: the classes name suffix, used as the main namespace if no prefix is defined
_Optional_ basic Authentication credentials, if the WSDL is protected by a Basic Authentication, then specify:
- \-\-login: the basic authentication login
- \-\-password: the basic authentication login
_Optional_ proxy configuration, if you're behind a proxy:
- \-\-proxy-host: the proxy host
- \-\-proxy-port: the proxy port
- \-\-proxy-login: your proxy login
- \-\-proxy-password: your proxy password
_Optional_ directories structure:
- \-\-category:
    - cat _(default)_, each class is put in a directory that matches its type such as:
        - ArrayType: any array type class
        - EnumType: any class that only contains constants _(enumerations)_
        - ServiceType: classes that contains the methods matching the _operations_
        - StructType: any class that is a _simpleType_ or _complexType_ or an _abstract_ element
    - none: all the classes are generated directly in the root directory defined by the destination
- \-\-structs-folder: each struct is created in a sub directory of the root src folder. By default, the directory is named _StructType_
- \-\-arrays-folder: each array is created in a sub directory of the root src folder. By default, the directory is named _ArrayType_
- \-\-enums-folder: each enumeration is created in a sub directory of the root src folder. By default, the directory is named _EnumType_
- \-\-services-folder: each service class is created in a sub directory of the root src folder. By default, the directory is named _ServiceType_
_Optional_ operation gathering method, if you have getList, getUsers, getData and setUser as operations:
- \-\-gathermethods:
    - start _(default)_: you'll have one Get class that contains the getList, getUsers and getData methods and another class Set that contains only the setUser method
    - none: you'll have only one class that contains all the methods getList, getUsers, getData and setUser methods
    - end, you'll have 4 classes :
        - List that contains the getList method,
        - User that contains the setUser method,
        - Users that contains the getUsers method,
        - Data that contains the getData method
_Optional_ generated classes namespace and inheritance:
- \-\-namespace: prefix classes' main namespace with your namespace
- \-\-standalone _(default: ```true```)_: enables/disables the installation of the PackageBase package that contains the base class from which StructType, ArrayType and ServiceType classes inherit. If enabled, you MUST provide the ```composer-name``` option
- \-\-struct _(default: \WsdlToPhp\PackageBase\AbstractStructBase)_: sets the class from which StructType classes inherit, see StructInterface
- \-\-structarray _(default: \WsdlToPhp\PackageBase\AbstractStructArrayBase)_: sets the class from which StructArrayType classes inherit, see StructArrayInterface
- \-\-soapclient _(default: \WsdlToPhp\PackageBase\AbstractSoapClientBase)_: sets the class from which ServiceType classes inherit, see SoapClientInterface
_Optional_ various other options:
- \-\-gentutorial _(default: ```true```)_: enables/disables the tutorial file generation
- \-\-genericconstants _(default: ```false```)_: enables/disables the naming of the constants (_enumerations_) with the constant value or as a generic name:
    - true: ```const VALUE_DEFAULT = 'Default'```
    - false: ```const ENUM_VALUE_0 = 'Default'```
- \-\-addcomments: alow to add PHP comments to classes' PHP DocBlock _(mulitple values allowed)_
_Optional_ configuration file to use. It loads it first, then take into account the option you pass in the command line. By default, it uses:
- \-\-config: the path to any configuration file you want anywhere you want
- the wsdltophp.yml.dist (provided with the source code) file located under the root folder OTHERWISE
- the wsdltophp.yml file (your own file) located under the root folder OTHERWISE
- the default configuration file located at src/resources/config/generator_options.yml
 UsagesCommand lineDownload the binary file $ wget https://phar.wsdltophp.com/wsdltophp.phar
 Check its version $ ./wsdltophp.phar --version
 Display generic help $ ./wsdltophp.phar --help
 Display command line help $ ./wsdltophp.phar generate:package --help
 The most basic way$ ./wsdltophp.phar generate:package \
    --urlorpath="http://developer.ebay.com/webservices/latest/ebaySvc.wsdl" \
    --destination="/path/to/where/the/package/must/be/generated/" \
    --composer-name="myproject/mypackage" \
    --force
$ cd /path/to/where/the/package/must/be/generated/
$ ls -la => enjoy!
$ vi tutorial.php
 With full options$ ./wsdltophp.phar generate:package \
    --urlorpath="http://developer.ebay.com/webservices/latest/ebaySvc.wsdl" \
    --login="*" \
    --password="*" \
    --proxy-host="" \
    --proxy-port=*  \
    --proxy-login="*" \
    --proxy-password="*" \
    --destination='/var/www/Api/' \
    --prefix="Api" \
    --suffix="Project" \
    --category="cat" \
    --gathermethods="start" \
    --genericconstants=false \
    --gentutorial=true \
    --standalone=true \
    --addcomments="date:2015-04-22" \
    --addcomments="author:Me" \
    --addcomments="release:1.1.0" \
    --addcomments="team:Dream" \
    --namespace="My\Project" \
    --struct="\Std\Opt\StructClass" \
    --structarray="\Std\Opt\StructArrayClass" \
    --soapclient="\Std\Opt\SoapClientClass" \
    --composer-name="myproject/mypackage" \
    --structs-folder="Structs" \
    --arrays-folder="Arrays" \
    --enums-folder="Enums" \
    --services-folder="Services" \
    --config="/path/to/your/configuration/file.yml" \
    --force
$ cd /var/www/Api/
$ ls -la => enjoy!
 Debug options before actually generating the packageRemove `--force`option from the previous command line to get this result:  Start at 2015-08-29 07:51:32
  Generation not launched, use "--force" option to force generation
  Generator's option file used: /path/to/your/configuration/file.yml
  Used generator's options:
    category: cat
    gather_methods: start
    generic_constants_names:
    generate_tutorial_file: 1
    add_comments: 2015-04-22, Me, 1.1.0, Dream
    namespace_prefix: My\Project
    standalone: 1
    struct_class: \Std\Opt\StructClass
    struct_array_class: \Std\Opt\StructArrayClass
    soap_client_class: \Std\Opt\SoapClientClass
    origin: http://developer.ebay.com/webservices/latest/ebaySvc.wsdl
    destination: /var/www/Api/
    prefix: Api
    suffix: Project
    basic_login: *
    basic_password: *
    proxy_host: 
    proxy_port: *
    proxy_login: *
    proxy_password: *
    soap_options:
    composer_name: myproject/mypackage
    structs_folder: Structs
    arrays_folder: Arrays
    enums_folder: Enums
    services_folder: Services
 End at 2015-08-29 07:51:32, duration: 00:00:00
 ProgrammaticGet the source code: $ git clone https://github.com/WsdlToPhp/PackageGenerator.git wsdltophp
$ cd wsdltophp
$ composer install --no-dev
 The basic wayCreate a PHP script to generate the package: $ vi generate.php
 With: <?php
require_once __DIR__ . '/vendor/autoload.php';
use WsdlToPhp\PackageGenerator\Generator\Generator;
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions;
// Options definition
$options = GeneratorOptions::instance(/'/path/to/your/configuration/file.yml'/);
$options
    ->setOrigin('http://developer.ebay.com/webservices/latest/ebaySvc.wsdl')
    ->setDestination('/path/to/where/the/package/must/be/generated/')
    ->setComposerName('myproject/mypackage');
$generator = new Generator($options);
$generator->generatePackage();
 Then execute it: $ php generate.php
 Create a PHP script to use the generate package: $ vi use.php
 With: <?php
require_once '/path/to/where/the/package/must/be/generated/vendor/autoload.php';
use WsdlToPhp\PackageBase\AbstractSoapClientBase;
$options = array(
    AbstractSoapClientBase::WSDL_URL => 'http://developer.ebay.com/webservices/latest/ebaySvc.wsdl',
    AbstractSoapClientBase::WSDL_CLASSMAP => \MyPackage\MyPackageClassMap::get(),
);
// if getList operation is provided by the Web service
$serviceGet = new \MyPackage\ServiceType\MyPackageServiceGet($options);
$result = $serviceGet->getList();
// if addRole operation is provided by the Web service
$serviceAdd = new \MyPackage\ServiceType\MyPackageServiceAdd($options);
$result = $serviceAdd->addRole();
// ...
 Execute your PHP script: $ php use.php
 Dealing with the options<?php
require_once __DIR__ . '/vendor/autoload.php';
use WsdlToPhp\PackageGenerator\Generator\Generator;
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions;
// Options definition
$options = GeneratorOptions::instance(/'/path/to/your/configuration/file.yml'/);
$options
    ->setCategory(GeneratorOptions::VALUE_CAT)
    ->setGatherMethods(GeneratorOptions::VALUE_START)
    ->setGenericConstantsNames(GeneratorOptions::VALUE_FALSE)
    ->setGenerateTutorialFile(GeneratorOptions::VALUE_TRUE)
    ->setStandalone(GeneratorOptions::VALUE_TRUE)
    ->setNamespacePrefix('My\Project')
    ->setAddComments(array(
        'date' => date('Y-m-d'),
        'team' => 'Dream',
        'author' => 'Me',
        'release' => '1.1.0',
    ))
    ->setNamespacePrefix('My\Project')
    ->setStructClass('\Std\Opt\StructClass')
    ->setStructArrayClass('\Std\Opt\StructArrayClass')
    ->setSoapClientClass('\Std\Opt\SoapClientClass')
    ->setOrigin('http://developer.ebay.com/webservices/latest/ebaySvc.wsdl')
    ->setDestination('/path/to/where/the/package/must/be/generated/')
    ->setPrefix('Api')
    ->setSuffix('Project')
    ->setBasicLogin($login)
    ->setBasicPassword($password)
    ->setProxyHost($proxyHost)
    ->setProxyPort($proxyPort)
    ->setProxyLogin($proxyLogin)
    ->setProxyPassword($proxyPassword)
    ->setComposerName('myproject/mypackage')
    ->setStructsFolder('Structs')
    ->setArraysFolder('Arrays')
    ->setEnumsFolder('Enums')
    ->setServicesFolder('Services');
// Generator instanciation and package generation
$generator = new Generator($options);
$generator->generatePackage();
 Unit testsYou can run the unit tests with the following command: $ phpunit
 You have several `testsuite`s available which run test in the proper order: 
command: tests command class
configuration: tests configuration readers
utils: tests utils class
domhandler: tests dom handlers (Basic and Wsdl + Tag)
model: tests models
container: tests containers (Model and PhpElement)
parser: tests parsers (SoapClient and Wsdl)
file: tests files generation
packagegenerator: tests generator methods
 $ phpunit --testsuite=model
 |