太晚了,但因爲我想出了同樣的問題。但供參考,我想發佈我如何解決這個問題。
當我想要自己處理所有的響應而不使用響應宏或變換器,並且覆蓋許多其他框架默認方法。這是我完全控制了響應對象的方式。
剛剛發佈供參考,因爲我認爲它以更清晰的方式解決了 問題。
很多重寫通過管道和路由完成,因此它被註冊爲基礎服務提供商。這是我如何設法覆蓋所有。
這裏我使用laravel 5.3
1 - 創建一個新的響應類
<?php
namespace App\Extensions\Illuminate\Http;
// use Illuminate\Http\Response as BaseResponse;
use Symfony\Component\HttpFoundation\Response as BaseResponse;
class Response extends BaseResponse
{
public function setContent($content)
{
//do what ever you want to do with the content
//dd($content);
}
}
2 - 創建一個新的路由器,並使用新的響應
<?php
namespace App\Extensions\Illuminate\Routing;
use Illuminate\Http\Request;
use Illuminate\Routing\Events\RouteMatched;
use Illuminate\Routing\Router as IlluminateRouter;
use App\Extensions\Illuminate\Http\Response;
class Router extends IlluminateRouter
{
public function prepareResponse($request, $response)
{
if ($response instanceof PsrResponseInterface) {
$response = (new HttpFoundationFactory)->createResponse($response);
} elseif (! $response instanceof SymfonyResponse) {
$response = new Response($response);
}
return $response->prepare($request);
}
}
3 - 創建新的路由服務提供商使用新路由器
<?php
namespace App\Providers;
use Illuminate\Routing\RoutingServiceProvider as ServiceProvider;
use App\Extensions\Illuminate\Routing\Router;
class RoutingServiceProvider extends ServiceProvider
{
protected function registerRouter()
{
$this->app['router'] = $this->app->share(function ($app) {
return new Router($app['events'], $app);
});
}
}
4 - 創建新的應用程序類,並使用新的路由服務提供商
<?php
namespace App\Extensions\Illuminate\Foundation;
use Illuminate\Events\EventServiceProvider;
use Illuminate\Foundation\Application as App;
use App\Providers\RoutingServiceProvider;
class Application extends App
{
protected function registerBaseServiceProviders()
{
$this->register(new EventServiceProvider($this));
$this->register(new RoutingServiceProvider($this));
}
}
5 - 在引導,最後\ app.php使用新的申請
// $app = new Illuminate\Foundation\Application(
// realpath(__DIR__.'/../')
//);
$app = new App\Extensions\Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
謝謝您響應,但它不工作,也許是因爲它不是一個門面,我試圖覆蓋「Illuminate \ Http \ Response」而不是「Illuminate \ Support \ Facades \ Request」 – zeomega
「Facade」是訪問點'回覆sponse'對象,這是laravel使用的。 –