扩展Symfony 2请求服务?

扩展Symfony 2请求服务?,symfony,Symfony,我在Symfony 2网站上的以下页面。这很有趣: 您可以将保存服务类名的参数设置为您自己的 通过在app/config/config.yml中设置来初始化。这当然只是 如果类名定义为服务中的参数,则可能 包含服务的捆绑包的配置 因此,我查看了/vendor/symfony/src/symfony/Bundle/FrameworkBundle/Resources/config,发现session.xml正在定义%session.class%参数,因此应该可以很容易地使用以下内容扩展symfony

我在Symfony 2网站上的以下页面。这很有趣:

您可以将保存服务类名的参数设置为您自己的 通过在app/config/config.yml中设置来初始化。这当然只是 如果类名定义为服务中的参数,则可能 包含服务的捆绑包的配置

因此,我查看了
/vendor/symfony/src/symfony/Bundle/FrameworkBundle/Resources/config
,发现
session.xml
正在定义
%session.class%
参数,因此应该可以很容易地使用以下内容扩展symfony
session
类:

namespace Acme\HelloBundle\Component\HttpFoundation;
使用Symfony\Component\HttpFoundation\Session;
类ExtendedSession扩展会话
{
公共函数setSuccessFlashText($text,数组参数=array())
{
父级::setFlash('success',$this->getTranslator()->trans($text,$params);
}
}
我还没有对此进行测试。但是如何对
请求
特殊服务进行同样的测试?我想添加一些方便的快捷方式,以使我的代码更易于阅读

我在
services.xml
文件中找到了这个:


这是我的
app.php
。我应该如何传递自定义请求类的实例

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

use Symfony\Component\HttpFoundation\Request;

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
$kernel->handle(Request::createFromGlobals())->send();
嗯,很简单

在您的
app.php
中,只需传递
YourRequest的实例,而不是默认值:

require_once __DIR__.'/../app/bootstrap.php.cache';
require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

use src\YourCompany\YourBundle\YourRequest;

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
$kernel->handle(YourRequest::createFromGlobals())->send();
只要确保在
YourRequest
类中从默认的
Request
扩展即可

应该在没有其他服务定义的情况下工作


根据评论,有人认为这会导致IDE自动完成出现问题。理论上,这不应该

在控制器中,您只需添加
use
语句

use src\YourCompany\YourBundle\YourRequest;
在操作中,当您传递
$request
时,只需定义其类:

public function yourAction(YourRequest $request)
这将给你自动完成

如果您想作为服务或从控制器获取请求,对于IDE,您还可以在注释文档中定义其类:

    /** @var $request YourRequest */
    $request = $this->getRequest();

web/app.php
-您没有这样的?O_o@thecatontheflatlol:D我在看
/app
文件夹…我现在要更新这个问题。嗯…看起来很简单,我会试试!然后我想唯一的不好的事情是,你无法获得IDE自动完成功能…你总是可以。更新了我的答案。请告诉我如何提出我们的请求类在测试中可用?当使用功能测试时,我的自定义请求中的自定义方法不可用。请帮助…@WaxCage更难,请检查Symfony\Component\BrowserKit\Client,Request method。我认为您可以复制/粘贴此方法,并用您的。