2015-08-25 19 views
9

Ho iniziato a imparare Laravel. Fino ad ora, tutto ha funzionato perfettamente. Sto seguendo questo tutorial e sono bloccato con episode 7.L'artigiano PHP all'improvviso non funziona

Il problema è che non posso più avviare l'artigiano. Ho provato ad installare Tinker, e probabilmente ho aggiornato l'artigiano quindi sono finito senza artigiano e stagnino. Sto usando Linux Ubuntu 12.04 LTS. Ho installato tutto tramite la riga di comando. Dopo di che ho provato a correre:

php artigianale --version

Il seguente problema si è verificato:

[ErrorException]
Dichiarazione di App \ Providers \ EventServiceProvider :: avvio() deve essere compatibile con Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider :: boot
()

Ecco come il mio file di app/Providers/EventServiceProvider.php assomiglia:

<?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); 

     // 
    } 
} 

sto usando laravel 5.2 e la mia composer.json sembra che questo:

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

ho visto simili problemi qui ad esempio:

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

ma mai la risposta è stata data direttamente e in realtà non capisco come risolvere questo problema? Avrei bisogno di una risposta diretta perché sono un principiante in Laravel. L'artigiano può essere aggiornato in qualche modo facile con la riga di comando di Linux in modo che possa funzionare di nuovo?

+1

laravel 5.2 non è ancora stata rilasciata. – lukasgeiter

+1

Come ha detto ... Cambia la tua versione in Laravel 5.1 – CreativityKills

risposta

2

Parlando strettamente da un punto di vista PHP, quando artigianale tenta di avviare l'applicazione CLI, e si ottiene questo errore

Dichiarazione di App \ Providers \ EventServiceProvider :: avvio() dovrebbe essere compatibile con Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider :: boot

Hai definito una classe App\Providers\EventServiceProvider. Questa classe ha Illuminate\Foundation\Support\Providers\EventServiceProvider come genitore/antenato (con alias come ServiceProvider nella classe).

Il metodo di avvio in ilIlluminate\Foundation\Support\Providers\EventServiceProvider ha una serie di argomenti. Hai definito boot in App\Providers\EventServiceProvider e modificato tali argomenti in qualche modo (un numero inferiore di argomenti, diversi tipi di suggerimenti, diversi/nessun valore predefinito, ecc.).

Non puoi farlo.

Ti rende compatibile con la classe genitore boot e risolvi il problema.

(Questo, tuttavia, potrebbe non risolvere tutti i vostri problemi, come i commenti che rendono il suono come si sta utilizzando una versione inedita di laravel che potrebbe differire da quello che c'è in un tutorial)

+0

Alan Strom - dove posso trovare Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider quindi so che è esattamente "lì" e non in qualche altro file? Inizialmente non ho fatto nulla .. Non ho ancora definito alcun avvio, e non sono sicuro ora come potrei rendere il mio "boot compatibile con la classe genitore"? Penso che dovrei usare Laravel 5.1 – DarioBB

+0

@DarioBB cercare la stringa '" funzione boot "' in un file nel filesystem sotto un percorso in 'Illuminate/Foundation/Support/Providers \ EventServiceProvider.php' o qualcosa di molto simile a quello . A causa di PSR4, puoi conoscere il percorso del filesystem perché corrisponderà allo spazio dei nomi. Sembra che "EventServiceProvider :: boot()" sia una funzione dichiarata dall'interfaccia e mancano argomenti che vengono dichiarati lì. – user151841

9

A quanto pare, il nuovo boot() il metodo non accetta argomenti. Dovrai applicare alcune modifiche ai tre provider.

 /** 
     * 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(); 

     // 
    } 

Controllare questo commit per l'elenco completo delle modifiche.

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

3

ho incontrato lo stesso problema in fucina durante l'esecuzione l'aggiornamento a 5.3, è necessario sbarazzarsi di bootstrap/cache e come lei ha ricordato artigiano non si avvia a causa di tale errore quindi è necessario fare è il vecchio modo: rm -R bootstrap/cache e poi mkdir bootstrap/cache. Non dimenticare di applicare le autorizzazioni corrette di bootstrap/cache dopo aver terminato.

+0

Questa è la risposta corretta –

6

Simile alla risposta @greut, ma se è causato dall'aggiornamento di laravel (che può essere attivato se si installa altro pacchetto tramite composer update e la versione per laravel è dev-master), ci sono 2 posizioni che è necessario modificare parametro.

App\Providers\RouteServiceProvider 
App\Providers\EventServiceProvider 

In entrambi controllore, v'è un metodo denominato boot(). Cambia il parametro in vuoto. cioè

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

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