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