我如何覆盖Request类?

时间:2018-06-09 03:39:48

标签: override concrete5 concrete5-8.x

我尝试重写核心类,但这个似乎不起作用。我知道我需要更新application / config / app.php文件以指向新类。但是当我这样做时,HTML redender会停在head标签处。

我将请求类从核心扩展到application / src,更新了app.php文件,但它确实有效并给了我一个空白页面。我需要这个来使用重定向网址。

2 个答案:

答案 0 :(得分:0)

如果您的目标是在发送回请求之前对请求执行某些操作,则可能需要使用中间件而不是覆盖该类。

一个很好的例子是您可以在此处找到的Centry门户网站包:https://github.com/a3020/centry

查看centry\Provider\CentryServiceProvider.php函数registerMiddleware(),了解如何注册中间件。 然后查看centry\Http\Middleware中的2个文件,看看它是如何使用的。

答案 1 :(得分:0)

如果您使用的是版本8,则需要在src文件夹中自动加载您的类。

在application / bootstrap / autoload.php

Person

从此处您需要覆盖关联的服务提供商。您要覆盖哪个类以及需要哪个服务提供商并不完全清楚。下面是一个覆盖\ Concrete \ Core \ Http \ HttpServiceProvider的示例,其中类放在application / Src / Example / HttpServiceProvider中

$classLoader = new \Symfony\Component\ClassLoader\Psr4ClassLoader();
$classLoader->addPrefix('Application\\Example', DIR_APPLICATION . '/' . DIRNAME_CLASSES . '/Example');

从服务提供者,您可以扩展类并以适合您的用例场景的方式覆盖返回的类(如果多个类具有引用,这可能是单调乏味的,但这是我知道正确覆盖核心类的唯一方法)。通常,您可以扩展现有类,覆盖一个或两个方法,并提出一个优雅的解决方案。