如何在 symfony 2 的命令 class 中使用 class 控制器函数?
how to use class controller functions in command class of symfony 2?
我正在使用 symfony 2 命令构建一个批处理文件 class。我有一个函数可以处理来自捆绑包内控制器的数据库
class SubmitDisclosureController 扩展 FOSRestController 实现 MEAuthController
{
...
public 函数 discDetails($discId) {<br>
$emr = $this->getDoctrine()->getEntityManager();
我是通过命令 src/AppBundle/Command/BatchJobCommand.php
调用它的,如下所示
class BatchJobCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln([
'User Creator',
'============',
'',
]);
// retrieve the argument value using getArgument()
$output->writeln('First batch job')
$disc = new SubmitDisclosureController();
$disc->discDetails('42094');
`
如果我尝试执行它,它会给出 PHP Fatal error: Call to a member function has() on null in C:\xampp\htdocs\GR\
vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.
php on line 288
是否无法通过从命令调用控制器的函数来重新使用代码 class?
$disc = new SubmitDisclosureController();
$disc->setContainer($this->getContainer());
$disc->discDetails('42094');
会让您越过错误消息。然而,正如@MateiMihai 所说,更好的设计是将光盘功能移动到它自己的服务中,然后在您的控制器、命令和测试之间共享它 类。 http://symfony.com/doc/current/service_container.html
`
说什么 Matei 正是您所需要的:创建一个服务并在每个 class 上使用它:
class DisclosureService { ... public function discDetails($discId) {...} }
在你的services.yml配置文件中,你必须添加它。
disclosure:
class: Your\Namespace\DisclosureService
arguments: ["@doctrine", ...]
在您的命令和控制器中,您可以使用以下方式调用该服务:
$this->get('disclosure')->discDetails('')
详情可参考官方文档:http://symfony.com/doc/current/service_container.html
我正在使用 symfony 2 命令构建一个批处理文件 class。我有一个函数可以处理来自捆绑包内控制器的数据库
class SubmitDisclosureController 扩展 FOSRestController 实现 MEAuthController
{
...
public 函数 discDetails($discId) {<br>
$emr = $this->getDoctrine()->getEntityManager();
我是通过命令 src/AppBundle/Command/BatchJobCommand.php
调用它的,如下所示
class BatchJobCommand extends Command
{
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln([
'User Creator',
'============',
'',
]);
// retrieve the argument value using getArgument()
$output->writeln('First batch job')
$disc = new SubmitDisclosureController();
$disc->discDetails('42094');
`
如果我尝试执行它,它会给出 PHP Fatal error: Call to a member function has() on null in C:\xampp\htdocs\GR\
vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.
php on line 288
是否无法通过从命令调用控制器的函数来重新使用代码 class?
$disc = new SubmitDisclosureController();
$disc->setContainer($this->getContainer());
$disc->discDetails('42094');
会让您越过错误消息。然而,正如@MateiMihai 所说,更好的设计是将光盘功能移动到它自己的服务中,然后在您的控制器、命令和测试之间共享它 类。 http://symfony.com/doc/current/service_container.html `
说什么 Matei 正是您所需要的:创建一个服务并在每个 class 上使用它:
class DisclosureService { ... public function discDetails($discId) {...} }
在你的services.yml配置文件中,你必须添加它。
disclosure:
class: Your\Namespace\DisclosureService
arguments: ["@doctrine", ...]
在您的命令和控制器中,您可以使用以下方式调用该服务:
$this->get('disclosure')->discDetails('')
详情可参考官方文档:http://symfony.com/doc/current/service_container.html