Php 在命令中将控制器用作服务
我正在尝试从Symfony命令使用Wkhtmltopdf 我决定使用KnpSnappyBundle,所以我创建了一个用作服务的控制器 WkhtmltopdfController.phpPhp 在命令中将控制器用作服务,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
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
参数的方法由您决定。