Php 在命令中将控制器用作服务

Php 在命令中将控制器用作服务,php,symfony,wkhtmltopdf,symfony4,Php,Symfony,Wkhtmltopdf,Symfony4,我正在尝试从Symfony命令使用Wkhtmltopdf 我决定使用KnpSnappyBundle,所以我创建了一个用作服务的控制器 WkhtmltopdfController.php class WkhtmltopdfController extends Controller { public function indexUrl() { $snappy = $this->get('knp_snappy.pdf'); $filename = 'myFirstSnappyP

我正在尝试从Symfony命令使用Wkhtmltopdf

我决定使用KnpSnappyBundle,所以我创建了一个用作服务的控制器

WkhtmltopdfController.php

class WkhtmltopdfController extends Controller {

public function indexUrl()
{
    $snappy = $this->get('knp_snappy.pdf');
    $filename = 'myFirstSnappyPDF';
    $url = 'http://ourcodeworld.com';


    return new Response(
        $snappy->getOutput($url),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'inline; filename="'.$filename.'.pdf"'
        )
    );
}}
然后像这样从命令构造函数导入此服务

MyCommand

class GenerateQuittance extends Command {

private $snappy;
private $container;

public function __construct(WkhtmltopdfController $knpSnappyPdf, ContainerInterface $container)
{
    parent::__construct();
    $this->snappy = $knpSnappyPdf;
    $this->container = $container;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
 [...]
 $this->snappy->indexUrl();
}
但我在运行命令“app:myCommand”时抛出[error]错误。消息:“在null上调用成员函数get()

那么,如何将我的方法从WkhtmltopdfController应用到命令中呢


谢谢,

将控制器作为服务注入通常是个坏主意,因为它们会得到Symfony的特殊处理。考虑将您的<代码> WKHTMLTPopfDeal::索引XULL()<代码>方法重构为单独的服务。您可能还希望将
$filename
变量转换为参数,并将方法的返回值转换为普通输出,而不是
响应

还请注意,注入
ContainerInterface
也被认为是一种不好的做法,您需要明确列出要注入的服务


您的特定错误很可能是由于
get()
方法是由
ContainerTrait
提供的,它期望
ContainerInterface
可用(通过在基本容器中使用
containerWareTrait
),但在控制台
应用程序

的情况下,这种注入可能不会发生,将控制器作为服务注入通常是个坏主意,因为它们会得到Symfony的特殊处理。考虑将您的<代码> WKHTMLTPopfDeal::索引XULL()<代码>方法重构为单独的服务。您可能还希望将
$filename
变量转换为参数,并将方法的返回值转换为普通输出,而不是
响应

还请注意,注入
ContainerInterface
也被认为是一种不好的做法,您需要明确列出要注入的服务


您的特定错误很可能是由于
get()
方法是由
ContainerTrait
提供的,它期望
ContainerInterface
可用(通过在基本容器中使用
containerWareTrait
),但在控制台
应用程序

控制器不用于控制台命令的情况下,这种注入可能不会发生。请检查symfony文档。那么如何从命令中使用Wkhtmltopdf呢?我试图创建一个用作服务的控制器。控制器不用于控制台命令。请检查symfony文档。那么如何从命令中使用Wkhtmltopdf呢?我正在尝试创建一个用作服务的控制器。谢谢,我必须怎么做?我的目标是在命令行中使用Wkhtmltopdf。如果您查看您的代码,您将看到您在控制器中实际使用的唯一一行是
$this->get('knp_snappy.pdf')->getOutput($url)
。因此,您可以将
knp\u snappy.pdf
服务直接注入到您的命令中,并对其调用
getOutput()
。传递
$url
参数的方法由您决定。谢谢,我必须怎么做?我的目标是在命令行中使用Wkhtmltopdf。如果您查看您的代码,您将看到您在控制器中实际使用的唯一一行是
$this->get('knp_snappy.pdf')->getOutput($url)
。因此,您可以将
knp\u snappy.pdf
服务直接注入到您的命令中,并对其调用
getOutput()
。传递
$url
参数的方法由您决定。