2017-01-23 191 views
3

我只是升級到Laravel到5.x和使用"jenssegers/Date": "^3.0"Laravel 5.3遷移

所以在遷移時,似乎是一個錯誤:

[ErrorException] Declaration of Jenssegers\Date\Date::diffForHumans(Carbon\Carbon $since = NULL, $absolute = false) should be compatible with Carbon\Carbon::diffForHumans(Carbon\Carbon $other = NULL, $absolute = false, $short = false)

請建議可以做些什麼來解決這個問題。

回答

0

如果你比較current Carbon source code

public function diffForHumans(Carbon $other = null, $absolute = false, $short = false) 

current jenssegers/Date source code

public function diffForHumans(Carbon $since = null, $absolute = false, $short = false) 

你看到的不應該有任何問題。看起來你使用的是比Jenssegers/Date更新的Carbon,並且版本不兼容。你需要更新你的jenssegers/Date。

3.2.8 seems to be the latest release,我會去那裏測試。 3.2.3 seems to be the first version including the third parameter,與this commit

Carbon\Carbon::diffForHumans(Carbon\Carbon $other = NULL, $absolute = false, $short = false) has a new third argument and lack of it in Jenssegers\Date\Date::diffForHumans is not playing nicely.

所以您的版本必須至少這一點。

1

其實你的問題是這個包jenssegers/date。正如你所看到Jenssegers\Date延伸碳和線104

public function diffForHumans(Carbon $since = null, $absolute = false, $short = false) 

有不同的實現比碳

public function diffForHumans(Carbon $other = null, $absolute = false) 

克服這個是重新定義方法上要麼類,它不建議,因爲他們的方式都在供應商文件夾內。所以我想你的選擇是打開一個jassegers/date的問題,或者嘗試不使用那個包(如果你不使用它那麼寫你自己的替換)。

如果您的項目Composer.json中沒有此軟件包,但您使用的某個其他軟件包有jassegers/date作爲依賴項,則問題可能會更加嚴重。您可以在每個項目依賴關係的Composer.json中的供應商處進行檢查。在這種情況下,您可能會考慮使用與使用jassegers/date作爲依賴關係的包不同的包,至少在更新之前。

也許有人有更好的建議,這只是我的頭頂..

附:只記得..如果你直接在你的Composer.json中使用它,你也可以分叉jassegers/date,然後改變你自己的方法實現並使用分支版本,直到真正的版本被修復。如果您間接使用它(某些您使用的其他軟件包將其作爲依賴項),則會稍微複雜一點,這意味着您必須一直分叉軟件包,直到達到jassegers/date。這將是非常繁瑣的工作,但應該暫時解決問題。