2014-06-22 30 views
0

我在我的代碼中遇到問題,我認爲更簡單的解決方案似乎編輯Laravel Framework的Illuminate類。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

您以靜態方式調用該方法(::) –

+0

其實,沒有。我在after過濾器中使用'$ response-> headers()'。我編輯了我的問題。 –

+0

作爲一個方面說明,似乎你通過克隆框架項目來使用Laravel。檢查在這裏的答案更好的方法:http://stackoverflow.com/questions/21613136/should-i-download-laravel-for-every-project – Unnawut

回答

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?

+0

哎呦,我不小心告訴你,替換app.php到''響應'=>'MyApp \ MyResponse''這是錯誤的。這需要是「Response」=>'MyApp \ MyResponseFacade'。答案已更新。 – Unnawut

+0

感謝您的回答。我知道直接編輯課程並不好,但我不知道如何以不同的方式來完成。你的解決方案看起來不錯,我驗證了你的答案。 –

+0

事實上,你的代碼應該可以工作,但在我的情況下,'$ response'過濾器參數似乎是一個'Illuminate \ Http \ Response.php'實例。你知道我可以改變嗎? –