# sugguestion? report bugs?
# go to https://github.com/chrisyue/vim-snippets/issues

priority -50

snippet classn "Basic class with namespace snippet" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

/**
 * ${1:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
`$2
{
    public function __construct(${3:$options})
    {
        ${4:// code}
    }$0
}
endsnippet

snippet contr "Symfony2 controller" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

/**
 * ${1:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` extends Controller
{
}
endsnippet

snippet sfa "Symfony 2 Controller action"
/**
* @Route("/${1:route_name}", name="$1")
* @Template()
*/
public function $1Action($2)
{
	$3
	return ${4:[];}$0
}
endsnippet

snippet act "Symfony2 action" b
/**
 * @Route("$3", name="$4")
 * @Method({${5:"POST"}})
 * @Template()
 */
public function $1Action($2)
{
	$6
}
endsnippet

snippet actt "Symfony2 action and template" b
/**
 * @Route("$3", name="$4")
 * @Method({${5:"GET"}})
 * @Template()
 */
public function $1Action($2)
{
	$6
	return [];
}`!p
relpath = os.path.relpath(path)`
endsnippet

snippet comm "Symfony2 command" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

/**
 * ${3:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` extends ContainerAwareCommand
{
	protected function configure()
	{
		$this->setName('$1')
			->setDescription('$2')
			->setDefinition([
				new InputArgument('', InputArgument::REQUIRED, ''),
				new InputOption('', null, InputOption::VALUE_NONE, ''),
			]);
	}

	protected function execute(InputInterface $input, OutputInterface $output)
	{
	}
}
endsnippet

snippet subs "Symfony2 subscriber" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * ${1:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` implements EventSubscriberInterface
{
	public function __construct()
	{
	}

	/**
	 * {@inheritDoc}
	 */
	public static function getSubscribedEvents()
	{
		return [];
	}
}
endsnippet

snippet transf "Symfony2 form data transformer" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Symfony\Component\Form\DataTransformerInterface;
use Symfony\Component\Form\Exception\TransformationFailedException;

/**
 * ${3:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` implements DataTransformerInterface
{
	/**
	 * {@inheritDoc}
	 */
	public function transform($1)
	{
	}

	/**
	 * {@inheritDoc}
	 */
	public function reverseTransform($2)
	{
	}
}
endsnippet

snippet ent "Symfony2 doctrine entity" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Doctrine\ORM\Mapping as ORM;

/**
 * ${3:@author `!v g:snips_author`}
 *
 * @ORM\Entity()
 * @ORM\Table(name="`!p
tmp = re.match(r'.*(?=\.)', fn).group()
tmp = re.sub(r'\B([A-Z])', r'_\1', tmp)
snip.rv = tmp.lower()
`")
 */
`!p
m = re.search(r'Abstract', path)
if m:
	snip.rv = 'abstract '
`class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
`
{
	/**
	 * @ORM\Column(type="integer")
	 * @ORM\GeneratedValue
	 * @ORM\Id
	 */
	private $id;
}
endsnippet

snippet form "Symfony2 form type" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

/**
 * ${2:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` extends AbstractType
{
	/**
	 * {@inheritDoc}
	 */
	public function buildForm(FormBuilderInterface $builder, array $options)
	{
	}

	/**
	 * {@inheritDoc}
	 */
	public function setDefaultOptions(OptionsResolverInterface $resolver)
	{
		$resolver->setDefaults();
	}

	/**
	 * {@inheritDoc}
	 */
	public function getName()
	{
		return '$1';
	}
}
endsnippet

snippet ev "Symfony2 event" b
<?php

namespace `!p
relpath = os.path.relpath(path)
m = re.search(r'[A-Z].+(?=/)', relpath)
if m:
	snip.rv = m.group().replace('/', '\\')
`;

use Symfony\Component\EventDispatcher\Event;

/**
 * ${2:@author `!v g:snips_author`}
 */
class `!p
snip.rv = re.match(r'.*(?=\.)', fn).group()
` extends Event
{
}
endsnippet

snippet redir "Symfony2 redirect" b
$this->redirect($this->generateUrl('$1', $2));
endsnippet

snippet usecontroller "Symfony2 use Symfony\..\Controller" b
use Symfony\Bundle\FrameworkBundle\Controller\Controller;$1
endsnippet

snippet usereauest "Symfony2 use Symfony\..\Request" b
use Symfony\Component\HttpFoundation\Request;$1
endsnippet

snippet useroute "Symfony2 use Sensio\..\Route" b
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;$1
endsnippet

snippet useresponse "Symfony2 use Symfony\..\Response" b
use Symfony\Component\HttpFoundation\Response;$1
endsnippet

snippet usefile "Symfony2 use Symfony\..\File" b
use Symfony\Component\HttpFoundation\File\UploadedFile;$1
endsnippet

snippet useassert "Symfony2 use Symfony\..\Constraints as Assert" b
use Symfony\Component\Validator\Constraints as Assert;$1
endsnippet

snippet usetemplate "Symfony2 use Sensio\..\Template" b
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;$1
endsnippet

snippet usecache "Symfony2 use Sensio\..\Cache" b
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;$1
endsnippet

snippet usemethod "Symfony2 use Sensio\..\Method" b
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;$1
endsnippet

snippet usearray "Symfony2 use Doctrine\..\ArrayCollection" b
use Doctrine\Common\Collections\ArrayCollection;$1
endsnippet

snippet useorm "Symfony2 use Doctrine\..\Mapping as ORM" b
use Doctrine\ORM\Mapping as ORM;$1
endsnippet

snippet usesecure "Symfony2 use JMS\..\Secure" b
use JMS\SecurityExtraBundle\Annotation\Secure;$1
endsnippet