Слишком поздно, но поскольку я придумал ту же проблему. но для справки я бы хотел опубликовать, как я решил эту проблему.
Когда я хотел обработать весь ответ самостоятельно без использования макроса ответа или трансформатора и ДЛЯ ПЕРЕПОЛНЕНИЯ МНОГИХ ДРУГИХ РАМОЧНЫХ МЕТОДОВ ПО УМОЛЧАНИЮ. вот как я полностью взял контроль над объектом ответа.
только что размещен здесь для справки, так как я по-моему решает проблему более четко.
Часть переопределения, как это делается через трубопровод и маршрутизацию, и поэтому он зарегистрирован в качестве базового поставщика услуг. вот как мне удалось переопределить все.
здесь я использую 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
«Фасад» - это точка доступа к 'Re sponse', это то, что использует laravel. –