{"format":1,"manifest":{"name":"symfony-snippets","publisher":"vyloxi","version":"1.0.0","displayName":"Symfony Snippets","description":"Controllers, entities, forms, services, commands and Twig for Symfony. Install the PHP extension for colors.","engines":{"ferrum":"^0.1.0"},"categories":["Snippets"],"icon":"icon.png","repository":"https://github.com/voukengdongmofrankysteve/ferrum-market","license":"MIT","contributes":{"snippets":[{"language":"PHP","path":"snippets/php.json"},{"language":"Twig and Jinja","path":"snippets/twig-and-jinja.json"}]}},"files":{"icon.png":{"encoding":"base64","content":"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"},"snippets/php.json":{"encoding":"utf8","content":"{\n  \"Controller\": {\n    \"prefix\": \"sfctrl\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\Controller;\",\n      \"\",\n      \"use Symfony\\\\\\\\Bundle\\\\\\\\FrameworkBundle\\\\\\\\Controller\\\\\\\\AbstractController;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\HttpFoundation\\\\\\\\Response;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Routing\\\\\\\\Attribute\\\\\\\\Route;\",\n      \"\",\n      \"final class ${1:Name}Controller extends AbstractController\",\n      \"{\",\n      \"    #[Route('${2:/path}', name: '${3:app_name}')]\",\n      \"    public function index(): Response\",\n      \"    {\",\n      \"        return \\\\$this->render('${4:name/index.html.twig}');\",\n      \"    }\",\n      \"}\"\n    ],\n    \"description\": \"A controller\"\n  },\n  \"Route attribute\": {\n    \"prefix\": \"sfroute\",\n    \"body\": [\n      \"#[Route('${1:/path}', name: '${2:app_name}', methods: ['${3:GET}'])]\"\n    ],\n    \"description\": \"A Route attribute\"\n  },\n  \"Entity\": {\n    \"prefix\": \"sfent\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\Entity;\",\n      \"\",\n      \"use Doctrine\\\\\\\\ORM\\\\\\\\Mapping as ORM;\",\n      \"\",\n      \"#[ORM\\\\\\\\Entity]\",\n      \"class ${1:Name}\",\n      \"{\",\n      \"    #[ORM\\\\\\\\Id, ORM\\\\\\\\GeneratedValue, ORM\\\\\\\\Column]\",\n      \"    private ?int \\\\$id = null;\",\n      \"\",\n      \"    #[ORM\\\\\\\\Column(length: 255)]\",\n      \"    private ?string \\\\$${2:name} = null;\",\n      \"\",\n      \"    public function getId(): ?int\",\n      \"    {\",\n      \"        return \\\\$this->id;\",\n      \"    }\",\n      \"}\"\n    ],\n    \"description\": \"A Doctrine entity\"\n  },\n  \"Service\": {\n    \"prefix\": \"sfsvc\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\Service;\",\n      \"\",\n      \"final class ${1:Name}\",\n      \"{\",\n      \"    public function __construct(private readonly ${2:LoggerInterface} \\\\$${3:logger})\",\n      \"    {\",\n      \"    }\",\n      \"\",\n      \"    $0\",\n      \"}\"\n    ],\n    \"description\": \"A service\"\n  },\n  \"Command\": {\n    \"prefix\": \"sfcmd\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\Command;\",\n      \"\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Attribute\\\\\\\\AsCommand;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Command\\\\\\\\Command;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Input\\\\\\\\InputInterface;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Console\\\\\\\\Output\\\\\\\\OutputInterface;\",\n      \"\",\n      \"#[AsCommand(name: 'app:${1:do-it}', description: '${2:Does it}')]\",\n      \"class ${3:DoIt}Command extends Command\",\n      \"{\",\n      \"    protected function execute(InputInterface \\\\$input, OutputInterface \\\\$output): int\",\n      \"    {\",\n      \"        \\\\$output->writeln('${4:done}');\",\n      \"\",\n      \"        return Command::SUCCESS;\",\n      \"    }\",\n      \"}\"\n    ],\n    \"description\": \"A console command\"\n  },\n  \"Form type\": {\n    \"prefix\": \"sfform\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\Form;\",\n      \"\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Form\\\\\\\\AbstractType;\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\Form\\\\\\\\FormBuilderInterface;\",\n      \"\",\n      \"class ${1:Name}Type extends AbstractType\",\n      \"{\",\n      \"    public function buildForm(FormBuilderInterface \\\\$builder, array \\\\$options): void\",\n      \"    {\",\n      \"        \\\\$builder->add('${2:name}');\",\n      \"    }\",\n      \"}\"\n    ],\n    \"description\": \"A form type\"\n  },\n  \"Event subscriber\": {\n    \"prefix\": \"sfsub\",\n    \"body\": [\n      \"<?php\",\n      \"\",\n      \"namespace App\\\\\\\\EventSubscriber;\",\n      \"\",\n      \"use Symfony\\\\\\\\Component\\\\\\\\EventDispatcher\\\\\\\\EventSubscriberInterface;\",\n      \"\",\n      \"class ${1:Name}Subscriber implements EventSubscriberInterface\",\n      \"{\",\n      \"    public static function getSubscribedEvents(): array\",\n      \"    {\",\n      \"        return [\",\n      \"            ${2:\\\\\\\\'kernel.request\\\\\\\\'} => 'onEvent',\",\n      \"        ];\",\n      \"    }\",\n      \"\",\n      \"    public function onEvent(\\\\$event): void\",\n      \"    {\",\n      \"        $0\",\n      \"    }\",\n      \"}\"\n    ],\n    \"description\": \"An event subscriber\"\n  },\n  \"Repository query\": {\n    \"prefix\": \"sfrepo\",\n    \"body\": [\n      \"\\\\$this->createQueryBuilder('${1:e}')\",\n      \"    ->andWhere('${1:e}.${2:field} = :value')\",\n      \"    ->setParameter('value', ${3:\\\\$value})\",\n      \"    ->getQuery()\",\n      \"    ->getResult();\"\n    ],\n    \"description\": \"A repository query\"\n  },\n  \"JSON response\": {\n    \"prefix\": \"sfjson\",\n    \"body\": [\n      \"return \\\\$this->json(['${1:ok}' => true]);\"\n    ],\n    \"description\": \"A JSON response\"\n  },\n  \"Voter\": {\n    \"prefix\": \"sfvoter\",\n    \"body\": [\n      \"protected function supports(string \\\\$attribute, mixed \\\\$subject): bool\",\n      \"{\",\n      \"    return in_array(\\\\$attribute, ['${1:EDIT}'], true) && \\\\$subject instanceof ${2:Post};\",\n      \"}\"\n    ],\n    \"description\": \"A voter\"\n  }\n}\n"},"snippets/twig-and-jinja.json":{"encoding":"utf8","content":"{\n  \"Extends\": {\n    \"prefix\": \"twext\",\n    \"body\": [\n      \"{% extends '${1:base.html.twig}' %}\",\n      \"\",\n      \"{% block ${2:body} %}\",\n      \"    $0\",\n      \"{% endblock %}\"\n    ],\n    \"description\": \"extends\"\n  },\n  \"Path\": {\n    \"prefix\": \"twpath\",\n    \"body\": [\n      \"{{ path('${1:app_name}') }}\"\n    ],\n    \"description\": \"A route path\"\n  },\n  \"Asset\": {\n    \"prefix\": \"twasset\",\n    \"body\": [\n      \"{{ asset('${1:build/app.css}') }}\"\n    ],\n    \"description\": \"An asset\"\n  },\n  \"Form\": {\n    \"prefix\": \"twform\",\n    \"body\": [\n      \"{{ form_start(${1:form}) }}\",\n      \"    {{ form_widget(${1:form}) }}\",\n      \"    <button type=\\\"submit\\\">${2:Save}</button>\",\n      \"{{ form_end(${1:form}) }}\"\n    ],\n    \"description\": \"Render a form\"\n  },\n  \"Include\": {\n    \"prefix\": \"twinc\",\n    \"body\": [\n      \"{{ include('${1:partial.html.twig}') }}\"\n    ],\n    \"description\": \"include\"\n  }\n}\n"},"README.md":{"encoding":"utf8","content":"# Symfony Snippets\n\nControllers, entities, forms, services, commands and Twig for Symfony. Install the PHP extension for colors.\n\nType a prefix and press Tab. 15 snippets.\n\n| Language | Prefix | What it inserts |\n| --- | --- | --- |\n| PHP | `sfctrl` | A controller |\n| PHP | `sfroute` | A Route attribute |\n| PHP | `sfent` | A Doctrine entity |\n| PHP | `sfsvc` | A service |\n| PHP | `sfcmd` | A console command |\n| PHP | `sfform` | A form type |\n| PHP | `sfsub` | An event subscriber |\n| PHP | `sfrepo` | A repository query |\n| PHP | `sfjson` | A JSON response |\n| PHP | `sfvoter` | A voter |\n| Twig and Jinja | `twext` | extends |\n| Twig and Jinja | `twpath` | A route path |\n| Twig and Jinja | `twasset` | An asset |\n| Twig and Jinja | `twform` | Render a form |\n| Twig and Jinja | `twinc` | include |\n\nThis extension runs no code and asks for no permissions.\n"}}}