Php Laravel 5重写一个类方法
我想重写类Php Laravel 5重写一个类方法,php,overriding,laravel-5,Php,Overriding,Laravel 5,我想重写类illighted\Http\Response的方法setContent(),如下所示: <?php namespace MyNameSpace\MyClass; use Illuminate\Http\Response; class myResponse extends Reponse { public function setContent($content) // Something } } 您需要扩展以反映您所拥有的类,然后将链接更改为指向新的
illighted\Http\Response
的方法setContent()
,如下所示:
<?php
namespace MyNameSpace\MyClass;
use Illuminate\Http\Response;
class myResponse extends Reponse {
public function setContent($content)
// Something
}
}
您需要扩展以反映您所拥有的类,然后将链接更改为指向新的facade而不是laravels。您需要创建这样的facade
<?php namespace App\Facades;
use Illuminate\Support\Facades\Response as BaseResponse;
class Response extends BaseResponse {
public static function overwriteMethod()
{
//
}
}
然后将其添加到facades堆栈中
'Response' => 'App\Facades\Response',
太晚了,但我提出了同样的问题。但作为参考,我想发布我是如何解决这个问题的
当我想自己处理所有的响应时,不使用响应宏或转换器,覆盖许多其他框架默认方法。这就是我完全控制响应对象的方式
只是贴在这里作为参考,因为我认为它解决了问题
以更清晰的方式解决问题
很多重写都是通过管道和路由完成的,因此它注册为基本服务提供者。下面是我如何成功地覆盖所有的
这里我使用的是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);
}
}
感谢您的回复,但它不起作用,可能是因为它不是一个facade,我试图覆盖“light\Http\response”而不是“light\Support\Facades\Request”facade
是response
对象的访问点,这是laravel使用的。感谢您的回复,但它不起作用,可能是因为它不是一个门面,我试图覆盖“light\Http\Response”而不是“light\Support\Facades\Request”
<?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);
}
}
<?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);
}
}
<?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);
});
}
}
<?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));
}
}
// $app = new Illuminate\Foundation\Application(
// realpath(__DIR__.'/../')
// );
$app = new App\Extensions\Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);