首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony如何获取内核/内核接口

Symfony如何获取内核/内核接口
EN

Stack Overflow用户
提问于 2020-05-21 06:48:12
回答 1查看 538关注 0票数 0

我试图为getMime方法的参数获取KernelInterface对象,但我不知道在哪里查找以及如何找到它。我需要此方法来运行命令。

代码语言:javascript
复制
<?php


namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\KernelInterface;


class MimeController extends AbstractController
{
    public function getMime($video, KernelInterface $kernel)
    {
        $application = new Application($kernel);
        $application->setAutoExit(false);

        $input = new ArrayInput([
            'command' => 'get-video-mime',
            'fooArgument' => $video,

        ]);
        $output = new BufferedOutput();
        try {
            $application->run($input, $output);
        } catch (\Exception $e) {
        }

        $content = $output->fetch();

        // return new Response(""), if you used NullOutput()
        return $content;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-23 01:52:58

为了完整性起见,kernel服务是公共的,可以从容器中获取(您必须将'kernel' => KernelInterface::class添加到AbstractController的订阅服务中)

但是,这不是解决问题的好方法:

  • 首先,不要在控制器中实例化新的Application对象。
  • 如果您有一些用于计算mime类型的自定义逻辑,请创建一个服务,然后从控制器和控制台命令调用该服务。这样,如果有什么可以为您解决问题的方法,您可以删除代码并隔离responsabilities.
  • check : symfony有一个Mime组件,它公开了一个服务,您可以在控制器中使用该服务来计算文件的mime类型。
  • 如果您需要调用外壳命令(如果您没有其他选择),请使用symfony Process组件。它是专门设计用来执行shell脚本并让您访问结果的。不要将此作为一种捷径,这是一种糟糕的做法,可能会导致非常糟糕的问题(难以调试)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61924198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档