2017 © Pedro Peláez
 

symfony-bundle dto-generator-bundle

Converts XSD/JSON definitions into PHP classes

image

worldstores/dto-generator-bundle

Converts XSD/JSON definitions into PHP classes

  • Tuesday, April 5, 2016
  • by Orasik
  • Repository
  • 2 Watchers
  • 4 Stars
  • 15 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 1 Open issues
  • 4 Versions
  • 0 % Grown

The README.md

Symfony DTO Generator

This bundle is to save you time required to map and create DTO and serialise/deserialise XML and JSON structure. It will generate the DTO Classes for you using JMS serialiser notations and will setup a basic Behat feature to test your DTO., (*1)

Disclaimer

This bundle is still in development., (*2)

Requirement

You need XSD/Json schema for your data structure., (*3)

What does the bundle do?

Consider the following XML:, (*4)

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="CATALOG">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="CD" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:sequence>
              <xs:element type="xs:string" name="TITLE"/>
              <xs:element type="xs:string" name="ARTIST"/>
              <xs:element type="xs:string" name="COUNTRY"/>
              <xs:element type="xs:string" name="COMPANY"/>
              <xs:element type="xs:float" name="PRICE"/>
              <xs:element type="xs:short" name="YEAR"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

The bundle will generate the following DTO Classes, (*5)

<?php
/**
 * DTO CATALOG
 */
namespace AppBundle\Dto;

use JMS\Serializer\Annotation;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * CATALOG
 * 
 * @Annotation\ExclusionPolicy("none")
 * @Annotation\XmlRoot("CATALOG")
 */
class CATALOG
{
    /**
     * @var AppBundle\Dto\CD
     * @Annotation\Type("AppBundle\Dto\CD")
     * @Annotation\SerializedName("CD")
     * @Annotation\XmlElement(cdata=false)
     */
    private $CD;

    /**
     * Set CD
     *
     * @param AppBundle\Dto\CD $CD
     *
     * @return CATALOG
     */
    public function setCD($CD)
    {
        $this->CD = $CD;

        return $this;
    }

    /**
     * Get CD
     *
     * @return AppBundle\Dto\CD
     */
    public function getCD()
    {
        return $this->CD;
    }
}
<?php
/**
 * DTO CD
 */
namespace AppBundle\Dto;

use JMS\Serializer\Annotation;
use Doctrine\Common\Collections\ArrayCollection;

/**
 * CD
 * 
 * @Annotation\ExclusionPolicy("none")
 * @Annotation\XmlRoot("CD")
 */
class CD
{
    /**
     * @var string
     * @Annotation\Type("string")
     * @Annotation\SerializedName("TITLE")
     * @Annotation\XmlElement(cdata=false)
     */
    private $TITLE;

    /**
     * @var string
     * @Annotation\Type("string")
     * @Annotation\SerializedName("ARTIST")
     * @Annotation\XmlElement(cdata=false)
     */
    private $ARTIST;

    /**
     * @var string
     * @Annotation\Type("string")
     * @Annotation\SerializedName("COUNTRY")
     * @Annotation\XmlElement(cdata=false)
     */
    private $COUNTRY;

    /**
     * @var string
     * @Annotation\Type("string")
     * @Annotation\SerializedName("COMPANY")
     * @Annotation\XmlElement(cdata=false)
     */
    private $COMPANY;

    /**
     * @var Unknown
     * @Annotation\Type("Unknown")
     * @Annotation\SerializedName("PRICE")
     * @Annotation\XmlElement(cdata=false)
     */
    private $PRICE;

    /**
     * @var Unknown
     * @Annotation\Type("Unknown")
     * @Annotation\SerializedName("YEAR")
     * @Annotation\XmlElement(cdata=false)
     */
    private $YEAR;


    /**
     * Set TITLE
     *
     * @param string $TITLE
     *
     * @return CD
     */
    public function setTITLE($TITLE)
    {
        $this->TITLE = $TITLE;

        return $this;
    }

    /**
     * Get TITLE
     *
     * @return string
     */
    public function getTITLE()
    {
        return $this->TITLE;
    }
    /**
     * Set ARTIST
     *
     * @param string $ARTIST
     *
     * @return CD
     */
    public function setARTIST($ARTIST)
    {
        $this->ARTIST = $ARTIST;

        return $this;
    }

    /**
     * Get ARTIST
     *
     * @return string
     */
    public function getARTIST()
    {
        return $this->ARTIST;
    }
    /**
     * Set COUNTRY
     *
     * @param string $COUNTRY
     *
     * @return CD
     */
    public function setCOUNTRY($COUNTRY)
    {
        $this->COUNTRY = $COUNTRY;

        return $this;
    }

    /**
     * Get COUNTRY
     *
     * @return string
     */
    public function getCOUNTRY()
    {
        return $this->COUNTRY;
    }
    /**
     * Set COMPANY
     *
     * @param string $COMPANY
     *
     * @return CD
     */
    public function setCOMPANY($COMPANY)
    {
        $this->COMPANY = $COMPANY;

        return $this;
    }

    /**
     * Get COMPANY
     *
     * @return string
     */
    public function getCOMPANY()
    {
        return $this->COMPANY;
    }
    /**
     * Set PRICE
     *
     * @param Unknown $PRICE
     *
     * @return CD
     */
    public function setPRICE($PRICE)
    {
        $this->PRICE = $PRICE;

        return $this;
    }

    /**
     * Get PRICE
     *
     * @return Unknown
     */
    public function getPRICE()
    {
        return $this->PRICE;
    }
    /**
     * Set YEAR
     *
     * @param Unknown $YEAR
     *
     * @return CD
     */
    public function setYEAR($YEAR)
    {
        $this->YEAR = $YEAR;

        return $this;
    }

    /**
     * Get YEAR
     *
     * @return Unknown
     */
    public function getYEAR()
    {
        return $this->YEAR;
    }

}

Installation

You can install the bundle using composer, (*6)

composer require worldstores/dto-generator-bundle dev-master

then in AppKernel.php file, add the bundle to dev bundles array:, (*7)

if (in_array($this->getEnvironment(), array('dev', 'test'), true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
            $bundles[] = new WsSys\DtoGeneratorBundle\WsSysDtoGeneratorBundle();
        }

Example

1) Add the following XSD to Resources/xsd/dto_test.xsd, (*8)

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="note">
        <xs:complexType>
            <xs:sequence>
                <xs:element type="xs:string" name="to"/>
                <xs:element type="xs:string" name="from"/>
                <xs:element type="xs:string" name="heading"/>
                <xs:element type="xs:string" name="body"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

2) Run the following command:, (*9)

php app/console ws:generator:generate:dto \
    app/Resources/xsd/dto_test.xsd \
    src/AppBundle/Dto/ \
    AppBundle\\Dto \
    xsd \
    0 \
    AppBundle

3) Make sure that you have the folder Dto inside AppBundle, (*10)

It will generate a class named Note.php, (*11)

Command Arguments

php app/console ws:generator:generate:dto SourceFile DestinationClass Namespace type generateController? BundleName, (*12)

Argument Description
SourceFile XSD or Json schema file.
DestinationClass the Dto Class location including bundleName folder
Namespace Namespace of Dto.
FileType xsd or json
Generate Controller? 1 or 0
Bundle Name (optional) Bundle name that will have this DTO

Example:, (*13)

php app/console ws:generator:generate:dto \
    app/Resources/xsd/dto_test.xsd \
    src/AppBundle/Dto/ \
    AppBundle\\Dto \
    xsd \
    0 \
    AppBundle

The Versions

05/04 2016

dev-custom_type_object_generation_fix

dev-custom_type_object_generation_fix

Converts XSD/JSON definitions into PHP classes

  Sources   Download

MIT

The Requires

 

The Development Requires

php xml symfony converter xsd

01/04 2016

dev-master

9999999-dev

Converts XSD/JSON definitions into PHP classes

  Sources   Download

MIT

The Requires

 

The Development Requires

php xml symfony converter xsd

03/03 2016

dev-controller_generator_option

dev-controller_generator_option

Converts XSD/JSON definitions into PHP classes

  Sources   Download

MIT

The Requires

 

The Development Requires

php xml symfony converter xsd

01/03 2016

dev-dto_generator_base

dev-dto_generator_base

Converts XSD/JSON definitions into PHP classes

  Sources   Download

MIT

The Requires

 

The Development Requires

php xml symfony converter xsd