Util/Factory/Prototype/PrototypeBuilder.php
<?php

namespace Ali\DatatableBundle\Util\Factory\Prototype;

use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Form\Extension\Core\Type\FormType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;

class PrototypeBuilder
{

    /** @var \Symfony\Component\DependencyInjection\ContainerInterface */
    protected $container;
    
    /** @var string */
    protected $_prototype;

    /**
     * class constructor
     * 
     * @param ContainerInterface $container
     * @param string             $type 
     */
    public function __construct(ContainerInterface $container, $type)
    {
        $this->container = $container;
        $method = "_{$type}";
        $rc = new \ReflectionClass(__CLASS__);
        if ($rc->hasMethod($method))
        {
            $this->_prototype = $this->$method();
        }
        else
        {
            throw new \Exception(sprintf('prototype "%s" not found', $type));
        }
    }
    
    /**
     * to string class converter
     * 
     * @return string
     */
    public function __toString()
    {
        return $this->_prototype;
    }

    /**
     * simple form delete prototype
     * 
     * @return string
     */
    protected function _delete_form()
    {

        if (version_compare(phpversion(), '5.5', '<')) {
            return $this->container
                ->get('templating.helper.form')
                ->widget(
                    $this->container->get('form.factory')->createBuilder('form', array('id' => '@id'), array())
                        ->add('id', 'hidden')
                        ->getForm()
                        ->createView()
                );
        }
        else {
            return $this->container
                ->get('templating.helper.form')
                ->widget(
                    $this->container->get('form.factory')->createBuilder('Symfony\Component\Form\Extension\Core\Type\FormType', array('id' => '@id'), array())
                        ->add('id', 'Symfony\Component\Form\Extension\Core\Type\HiddenType')
                        ->getForm()
                        ->createView()
                );
        }
    }

}
