从命令行或Web运行的Symfony2脚本?

时间:2014-03-24 02:27:05

标签: symfony

我正在学习Symfony2框架,并想知道是否有办法创建可以从命令行或Web前端控制器运行的脚本。我知道这很不寻常,但是在某些特殊情况下,我喜欢使用web输出开发脚本,然后使用没有输出的命令行运行它。我的第一个想法是创建一个由路由调用并在Command对象中使用的控制器。这是设计它的最佳方式吗?

2 个答案:

答案 0 :(得分:1)

最好的方法是在服务中实现业务逻辑,创建一个运行它的Controller操作,并创建一个也运行它的ContainerAwareCommand。非常简单:)

答案 1 :(得分:0)

将您的逻辑提取到服务,类。

class DoSomethingAwesome
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    public function actuallyDoSomethingAwesome($param)
    {
        // your logic
    }
}

然后定义服务:

<service id="awesome.service" class="DoSomethingAwesome">
    <argument id="logger" type="service" />
</service>

然后,在您的命令和控制器中注入您的服务,或者如果您使用一个天真的默认实现,直接从容器中获取它:

class SomeController extends Controller
{
     public function someAction()
     {
          $this->get('awesome.service')->actuallyDoSomethingAwesome();
     }
}

class SomeCommand extends ContainerAwareCommand
{
     protected function execute(InputInterface $input, OutputInterface $output)
     {
          $this->container->get('awesome.service')->actuallyDoSomethingAwesome();
     }
}