Today we are going to learn to create symfony commands. You must have already used many symfony console commands. i.e. bin/console list doctrine or bin/console clear:cache
Sometimes we need to create our own commands and need to execute our custom code through the symfony command.
So lets start learning symfony commands. we will do it step by step.
Create class for the Command
We have to create the class for the command under src/Command/ directory.
Lets create our class for custom command src/Command/CustomCommand.php
#Code for class of command
// src/Command/CustomCommand.php <?php namespace App\Command; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Input\InputArgument; class CreateUserCommand extends Command { // In this function set the name, description and help hint for the command protected function configure(): void { // Use in-build functions to set name, description and help $this->setName('my-custom-command') ->setDescription('This command runs your custom task') ->setHelp('Run this command to execute your custom tasks in the execute function.') ->addArgument('param', InputArgument::REQUIRED, 'Pass the parameter.'); } // write the code you want to execute when command runs protected function execute(InputInterface $input, OutputInterface $output): int { // If you want to write some output $output->writeln('Pass the parameter' . $input->getArgument('param')); // Return below values according to the occurred situation if (SUCCESSFUL_EXECUTION_CONDITION) { // if everything is executed successfully with no issues then return SUCCESS as below return Command::SUCCESS; } elseif (EXECUTION_FAILURE_CONDITION) { // if execution fails return FAILURE as below return Command::FAILURE; } elseif (INVALID_EXECUTION_CONDITION) { // if invalid things happens i.e. invalid arguments etc. then return INVALID as below return Command::INVALID } } }
Lets understand the components in the command class –
Included namespaces
use Symfony\Component\Console\Command\Command;
Every custom command class must extend the Command class for working. So use Command class namespace in commad php file.
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
Above two classes are used for input and output operations while executing the custom commands. See the execute() function how these classes and used in the class parameters and used inside the function for input/output operations.
use Symfony\Component\Console\Input\InputArgument;
Include this class when you have to pass any argument while executing the command. See the configure() function how ‘param’ is set as a required argument.
configure() function
This function is used to set configurations for the console command.
In this function you can set the configurations like name, description and help hint for the console command.
// In this function set the name, description and help hint for the command protected function configure(): void { // Use in-build functions to set name, description and help $this->setName('my-custom-command') ->setDescription('This command runs your custom task') ->setHelp('Run this command to execute your custom tasks in the execute function.') ->addArgument('param', InputArgument::REQUIRED, 'Pass the parameter.'); }
execute() function
In this function, write the code to be executed on running the created console command.
You can return the constants according to the code execution conditions :
Command::SUCCESS : if successful execution
Command::FAILURE : if execution fails
Command::INVALID : if invalid execution (i.e. invalid arguments etc.)
// write the code you want to execute when command runs protected function execute(InputInterface $input, OutputInterface $output): int { // If you want to write some output $output->writeln('Pass the parameter' . $input->getArgument('param')); // Return below values according to the occurred situation if (SUCCESSFUL_EXECUTION_CONDITION) { // if everything is executed successfully with no issues then return SUCCESS as below return Command::SUCCESS; } elseif (EXECUTION_FAILURE_CONDITION) { // if execution fails return FAILURE as below return Command::FAILURE; } elseif (INVALID_EXECUTION_CONDITION) { // if invalid things happens i.e. invalid arguments etc. then return INVALID as below return Command::INVALID } }
In Symfony, Console commands are registered as services. All commands have console.command tag.
in the default services.yml configuration file commands are registered automatically by autoconfigurations.
Command Execution
After configuring and registering the command, you can run it in the terminal:
php bin/console my-custom-command
As soon as you run your command on console, the code written in the execute() function will be executed.
So this is how you can create and execute the console command in symfony.
You can also use these console commands to run cron jobs in symfony.
Below is an example to run a cron job using the symfony command :
* * * * root /usr/bin/php /path/to/bin/console command:to:execute
Hope this blog will help you in future development in symfony.
reference : symfony console commands
Happy coding. 🙂
Be the first to comment.