在 Symfony 2.8中, 我们引入了 MicroKernel trait 以提供一个不一样且更简单的方式来配置 Symfony full-stack 完整版框架。Symfony 4 将于 2017年11月发布,它会在创建新程序时,默认使用这个 trait。

与此同时,在 Symfony 3.4 中我们改进了 micro kernel 以便 允许订阅事件。你只需去实现常规的 EventSubscriberInterface 即可添加用于处理不同事件的方法。

思考下面简单程序,它要在执行过程中处理异常。在 Symfony 3.4 中你可以让 micro kernel 微内核去监听 KernelEvents::EXCEPTION 事件,然后执行 kernel 中的某个方法中的异常处理逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// src/Kernel.php
namespace App;
 
use App\Exception\DangerException;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
use Symfony\Component\HttpKernel\KernelEvents;
 
class Kernel extends BaseKernel implements EventSubscriberInterface
{
    use MicroKernelTrait;
 
    // ...
 
    public static function getSubscribedEvents()
    {
        return [KernelEvents::EXCEPTION => 'handleExceptions'];
    }
 
    public function handleExceptions(GetResponseForExceptionEvent $event)
    {
        if ($event->getException() instanceof DangerException) {
            $event->setResponse(Response::create('It\'s dangerous to go alone. Take this ⚔'));
        }
 
        // ...
    }
}