26/07/2015 - SYMFONY
Bazı işlemleri yapıp, sonucu bize geri vermesi için bir console komutu yaratıp, onu daha sonradan controller içinden çağırbiliriz. Aşağıdaki örnek verilen iki değeri çarpıp sonucu geri verir ve aynı zamanda gerekli kayıtları tutar.
services:
application_backend.command.calculator:
class: Application\BackendBundle\Command\CalculatorCommand
calls:
- [setContainer, [@service_container]]
namespace Application\BackendBundle\Command;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class CalculatorCommand extends ContainerAwareCommand
{
/**
* @var $logger LoggerInterface
*/
private $logger;
protected function configure()
{
$this
->setName('get:total')
->addArgument(
'controller',
InputArgument::REQUIRED,
'What is controller name?'
)
->addArgument(
'primary',
InputArgument::REQUIRED,
'What is primary number?'
)
->addArgument(
'secondary',
InputArgument::OPTIONAL,
'What is secondary number?'
)
->setDescription('This multiplies given numbers.');
}
protected function initialize(InputInterface $input, OutputInterface $output)
{
$this->logger = $this->getContainer()->get('logger');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->logger->info(
sprintf(
'Calling CalculatorCommand from [%s] with [%s] [%s] argument(s) at %s.',
$input->getArgument('controller'),
$input->getArgument('primary'),
$input->getArgument('secondary'),
date('Y-m-d H:i:s')
)
);
return $input->getArgument('primary') * $input->getArgument('secondary');
}
}
Varsayalım ki @application_backend.command.calculator
servisini controller içine controllers.yml dosyası ile enjekte ettiniz.
namespace Application\BackendBundle\Controller;
use Application\BackendBundle\Command\CalculatorCommand;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\NullOutput;
use Symfony\Component\HttpFoundation\Response;
class ApiController extends AbstractController
{
......
......
public function indexAction()
{
$input = new ArrayInput(['controller'=> 'ApiController', 'primary'=> 5, 'secondary'=> 3]);
$output = new NullOutput();
$result = $this->calculatorCommand->run($input, $output);
return new Response($result);
}
}
Eğer yukarıdaki contollerı çağırırsanız, sonuç olarak 15
geri verilir ve dev.log dosyası içine aşağıdaki satır girilir.
[2015-07-26 17:02:35] app.INFO: Calling CalculatorCommand from [ApiController] with [5] [3] argument(s) at 2015-07-26 17:02:35. [] []