2015-04-27 1 views
0

В соответствии с документацией на Symfony, я создал файл консоли в/бен папкунужно использовать команду консоли Symfony, чтобы принимать входные данные и получить доступ к данным из базы данных

!/USR/бен/окр PHP

date_default_timezone_set ('UTC');

set_time_limit (0);

(@include_once DIR. '/../vendor/autoload.php') || @include_once DIR. '/../../../autoload.php';

use AppBundle \ Console \ Command \ FetchCompetitionCommand; используйте Symfony \ Component \ Console \ Application;

$ app = новое приложение(); $ app-> add (новый FetchCompetitionCommand()); $ app-> run();

, а затем файл Command в Bundle/консоли/Command Folder

<?php 

namespace AppBundle\Console\Command; 

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

class FetchCompetitionCommand extends ContainerAwareCommand { 
    protected function configure() 
    { 
     $this 
      ->setName('getCompetition') 
      ->setDescription('Get the Competition Name (AFL,NRL)') 
      ->addArgument(
       'name', 
       InputArgument::OPTIONAL, 
       '(Which Competition Data are you looking to fetch?)' 
      ) 
     ; 
    } 

    protected function execute(InputInterface $input, OutputInterface $output) 
    { 
     $name = $input->getArgument('name'); 

     $output->writeln($name); 
    } 
} 
?> 

Что дальше мне нужно сделать для настройки базы данных и доступа к данным из базы данных

Заранее спасибо

ответ

2

В функции выполнения вы можете получить контейнер, и как только у вас есть контейнер, вы можете получить свои репозитории через доктрину и сделать свою базу данных

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $name = $input->getArgument('name'); 
    $container = $this->getContainer(); 
    $DM = $container->get('Doctrine')->getManager(); 
    $result = $DM->getRepository('NamspaceYourBundle:Entity')->findBy(array()); 
    /** do your stuff here */ 

    $output->writeln($name ); 
} 
1

Как правило, у меня есть класс обслуживания, который выполняет все необходимые функции, тогда команда консоли вызывает это. Преимущество этого заключается в том, что затем можно вызвать одну и ту же функциональность из любого места в вашей системе.

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $name = $input->getArgument('name'); 
    $my_service = $this->getContainer()->get('my.service.class'); 
    $bar = $my_service->foo($name); 
    $output->writeln($name ); 
} 

Пример функции из класса обслуживания;

public function foo($name) 
{ 
    $DM = $container->get('Doctrine')->getManager(); 
    $result = $DM->getRepository('NamspaceYourBundle:Entity')->findBy(array($name)); 
    return $result; 
}