照明类编辑不起作用

时间:2014-06-22 09:45:16

标签: php laravel laravel-4

我在代码中遇到问题,我认为,更简单的解决方案似乎是编辑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类?

1 个答案:

答案 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?