我在代码中遇到问题,我认为,更简单的解决方案似乎是编辑Laravel框架的Illuminate类。
所以我打开了我想要编辑的文件(public/laravel/framework/src/Illuminate/Http/Response.php
)并添加了一个方法headers
,它返回所有响应头:
public function headers()
{
return $this->headers;
}
但是,这个编辑似乎没有被应用,因为,当我想使用时:
Route::filter('cache.put', function($route, $request, $response){
$headers = $response->headers();
});
抛出Call to undefined method
错误。
我的问题是:如何编辑Laravel类?
答案 0 :(得分:2)
您不应该直接编辑属于Laravel框架的代码。稍后更新框架时会遇到问题。即使你设法按照你正在尝试的方式工作,它也有可能打破你的整个项目,因为Laravel仍会使用它自己的Response类,而你试图使用自己的。
您需要查看有关Facades
的文档,以Laravel的方式执行此操作:http://laravel.com/docs/facades
简而言之,由于您将调用的Response类是Facade
,因此您需要将Laravel的Response
外观替换为您自己的外观,并使用自定义外观指向您自己的响应类。像这样:
MyResponseFacade.php:
<?php namespace MyApp;
class MyResponseFacade extends \Illuminate\Support\Facades\Response
{
public static function make($content = '', $status = 200, array $headers = array())
{
return new MyResponse($content, $status, $headers);
}
}
MyResponse.php
<?php namespace MyApp
class MyResponse extends \Illuminate\Http\Response
{
public function headers()
{
return $this->headers;
}
}
然后在你的app.php中,替换:
'Response' => 'Illuminate\Support\Facades\Response',
用这个:
'Response' => 'MyApp\MyResponseFacade',
你完成了!整个Laravel应用程序应该返回您自己的类Response
,并且您可以使用其他代码Response
。
确保正确配置自动加载,并执行php artisan dump-autoload
,以便Laravel可以查看您的新文件。
作为旁注,您似乎通过克隆框架项目来使用Laravel。请查看此处的答案,以获得更好的方法:Should I download Laravel for every project?