2015-08-25 142 views
9

我已經開始學習Laravel了。到現在爲止,一切都很完美。我正在學習這個教程,並且我堅持使用episode 7PHP工匠突然不工作

問題是我不能再開始工匠了。我試圖安裝修補匠,並且我可能更新了工匠,所以我最終沒有工匠和修補匠。我正在使用Linux Ubuntu 12.04 LTS。我已通過命令行安裝了所有內容。從那以後,我試圖運行:

PHP工匠--version

發生以下問題:

[ErrorException]
軟件\供應商的聲明\ EventServiceProvider ::啓動()應該是 兼容 Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider :: boot
()

這是我的文件app/Providers/EventServiceProvider.php看起來像:

<?php 

namespace App\Providers; 

use Illuminate\Contracts\Events\Dispatcher as DispatcherContract; 
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; 

class EventServiceProvider extends ServiceProvider 
{ 
    /** 
    * The event listener mappings for the application. 
    * 
    * @var array 
    */ 
    protected $listen = [ 
     'App\Events\SomeEvent' => [ 
      'App\Listeners\EventListener', 
     ], 
    ]; 

    /** 
    * Register any other events for your application. 
    * 
    * @param \Illuminate\Contracts\Events\Dispatcher $events 
    * @return void 
    */ 
    public function boot(DispatcherContract $events) 
    { 
     parent::boot($events); 

     // 
    } 
} 

我使用Laravel 5.2和我的composer.json它看起來像這樣:

"php": ">=5.5.9", 
"laravel/framework": "5.2.*", 
"doctrine/dbal": "^[email protected]", 
"vluzrmos/tinker": "dev-master", 
"moon/artisan": "dev-master" 

我見過類似這裏的問題例如:

https://laracasts.com/discuss/channels/general-discussion/l5-composer-update-ends-with-an-error-suddenly

https://laracasts.com/discuss/channels/laravel/event-service-provider-in-package

但從來沒有直接給出答案,實際上我不明白如何解決這個問題?我需要直接回答,因爲我是Laravel的新手。使用Linux命令行可以更新某種簡單的工匠嗎?

+1

Laravel 5.2甚至還沒有尚未公佈。 – lukasgeiter

+1

就像他說的...將您的版本更改爲Laravel 5.1 – CreativityKills

回答

2

從一個PHP一點,當工匠試圖啓動其CLI應用嚴格地說,你會得到這個錯誤應用程序\提供商

宣言\ EventServiceProvider ::啓動()應該是兼容Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider :: boot

您已定義類App\Providers\EventServiceProvider。此班級有Illuminate\Foundation\Support\Providers\EventServiceProvider作爲父母/祖先(在您的班級中的別名爲ServiceProvider)。

中的引導方法您的Illuminate\Foundation\Support\Providers\EventServiceProvider有一組參數。您已在App\Providers\EventServiceProvider中定義了boot,並以某種方式更改了這些參數(更少的參數,不同的類型提示,不同的/無默認值等)。

你不能那樣做。

讓你boot與父類兼容,你就解決了你的問題。

(然而,這可能不會解決你所有的問題,因爲意見使它聽起來像你正在使用Laravel的未發佈的版本,可以從什麼是在一個教程不同)

+0

Alan Strom - 我可以在哪裏找到Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider,因此我知道它確切地是「there」問題,而不是其他文件? 我實際上沒有做任何事情......我之前沒有定義任何引導,我不知道現在我怎麼能讓我的「引導兼容父級」?我想我應該使用Laravel 5.1 – DarioBB

+0

@DarioBB在'Illuminate/Foundation/Support/Providers \ EventServiceProvider.php'的路徑下的文件系統文件中尋找字符串''function boot''或類似的東西。由於PSR4,您可以知道文件系統路徑,因爲它將匹配命名空間。這聽起來像'EventServiceProvider :: boot()'是一個接口聲明的函數,並且你缺少在那裏聲明的參數。 – user151841

9

顯然,新boot()方法不需要任何參數。您必須對這三個提供者進行一些更改。

 /** 
     * Register any other events for your application. 
     * 
-  * @param \Illuminate\Contracts\Events\Dispatcher $events 
     * @return void 
     */ 
- public function boot(DispatcherContract $events) 
+ public function boot() 
    { 
-  parent::boot($events); 
+  parent::boot(); 

     // 
    } 

看看這個提交的完整列表的變化。

https://github.com/laravel/laravel/commit/2b05ce3b054593f7622c1be6c4c6aadc1c5a54ae

3

我在鍛造遇到同樣的問題在執行升級到5.3,你需要擺脫引導/緩存和你所提到的,所以你需要做的工匠不會因爲錯誤的發動它是舊的方式:rm -R bootstrap/cache然後mkdir bootstrap/cache。完成後不要忘記應用引導程序/緩存的正確權限。

+0

這是正確的答案 –

6

類似@greut答案,但如果是通過升級laravel引起的(如果你是通過composer update安裝其他組件可能被觸發,你的版本laravel是dev-master),有需要改變的地方2參數。

App\Providers\RouteServiceProvider 
App\Providers\EventServiceProvider 

在兩個控制器中,都有一個名爲boot()的方法。將參數更改爲空。即

public function boot(/*original something here. empty it*/) 
{ 
    parent::boot(/*original something here. empty it*/); 
} 

參考:https://laracasts.com/discuss/channels/forge/laravel-53-update-causing-error-on-forge-only/replies/189654