在Symfony简单的控制台应用中,如何添加ORM,ODM, MailSender等服务


In Symfony simple console app, how to add services like ORM,ODM, MailSender

我想有我的服务,如ORM,ODM, MailSender等…在symfony的控制台应用中。

我使用了这个教程:

http://symfony.com/doc/current/cookbook/console/commands_as_services.html

但是我有一个错误。

vagrant@vagrant-debian-wheezy:~/www/aaaa/jocker$ php app/console      
  [Symfony'Component'DependencyInjection'Exception'ParameterNotFoundException]                                  
  The service "app.command.greet_command" has a dependency on a non-existent parameter "command.default_name".  

问题是:

  1. 我怎么能有控制台应用程序的所有服务设置在symfony应用程序(基于HTTP的symfony应用程序使用MVC)
  2. 是否可以在symfony中使用php cli运行操作?

简单而强大的控制台和HTTP使用相同的模式在不同的环境。

http://framework.zend.com/manual/current/en/modules/zend.console.introduction.html

首先,您不需要仅仅为了获取其他服务而将命令定义为服务—您只需要确保您的命令派生自ContainerAwareCommand

可以解决丢失参数异常。如果没有,请注意app/console通常会尝试使用'dev'环境,除非用环境变量覆盖,所以确保dev加载的任何参数都包含缺失的command.default_name参数

也可以通过环境变量设置参数,在本例中,您可以设置SYMFONY__COMMAND__DEFAULT_NAME以提供该参数值。

至于从控制台命令调用控制器操作,你可以做的是使该操作成为一个服务,你可以从基于HTTP的控制器和CLI控制台命令调用。