我正在关注Symfony 2网站上如何覆盖Bundle页面的任何部分.这是有趣的:
您可以通过在app/config/config.yml中设置将包含服务类名的参数设置为您自己的类.这当然只有在类名定义为包含服务的包的服务配置中的参数时才可能.
所以我看了,/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config我发现这session.xml是定义%session.class%参数,所以应该很容易扩展Symfony Session类,如:
namespace Acme\HelloBundle\Component\HttpFoundation;
use Symfony\Component\HttpFoundation\Session;
class ExtendedSession extends Session
{
public function setSuccessFlashText($text, array params = array())
{
parent::setFlash('success', $this->getTranslator()->trans($text, $params);
}
}
Run Code Online (Sandbox Code Playgroud)
我还没测试过这个.但是我怎么能用request特殊服务呢?我想添加一些方便的快捷方式,以使我的代码更容易阅读.
我在services.xml文件中找到了这个:
<!--
If you want to change the Request class, modify the code in
your front controller (app.php) so that it passes an instance of
YourRequestClass to the Kernel.
This service definition only defines the scope of the request.
It is used to check references scope.
-->
<service id="request" scope="request" synthetic="true" />
Run Code Online (Sandbox Code Playgroud)
这是我的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();
Run Code Online (Sandbox Code Playgroud)
Vit*_*ian 14
嗯,这很简单.
在您的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();
Run Code Online (Sandbox Code Playgroud)
只要确保,你从默认的扩展Request的YourRequest类.
应该没有额外的服务定义.
根据评论,有人认为这会导致IDE自动完成问题.从理论上讲 - 它不应该.
在您的控制器中,您只需添加use语句
use src\YourCompany\YourBundle\YourRequest;
Run Code Online (Sandbox Code Playgroud)
在行动中,你传递的地方$request,只需定义它的类:
public function yourAction(YourRequest $request)
Run Code Online (Sandbox Code Playgroud)
这将为您提供自动完成功能.
如果您想要获取服务请求或从控制器获取请求,对于IDE,您还可以在注释文档中定义其类:
/** @var $request YourRequest */
$request = $this->getRequest();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2915 次 |
| 最近记录: |