在Silex中装饰或扩展HTTP请求类

时间:2014-04-04 12:11:41

标签: php silex symfony-components

在示例中,我想向Request类添加其他方法,例如getRequiered*($name),如果在请求中遗漏了param,它将抛出异常。我想像这样实现它:

class MySmartRequest extends Request {
    // ...
    function getIntRequired($name) {
        $res = $this->get($name, null);
        if (null === $res) { throw new Exception('Missed required param'); }
        return (int) $res;
    }
}

// ...

$app->before(function(Request $r) {
    return new MySmartRequest($r);
});

可能吗?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的(从未实际执行此操作,以下只是阅读代码的提示)。

您需要创建Silex\Application的子类,并将run()函数覆盖为以下内容:

public function run(Request $request = null)
{
    if (null === $request) {
        $request = MySmartRequest::createFromGlobals();
    }

    $response = $this->handle($request);
    $response->send();
    $this->terminate($request, $response);
}

为避免重复,您可以尝试:

public function run(Request $request = null)
{
    if (null === $request) {
        $request = MySmartRequest::createFromGlobals();
    }

    parent::run($request); 
}