2015-08-25 2 views
9

Я начал изучать Laravel. До сих пор все работало отлично. Я следую этому руководству, и я застрял с episode 7.PHP artisan внезапно не работает

Проблема в том, что я больше не могу начинать ремесленник. Я попытался установить вокалист, и я, вероятно, обновил ремесленник, поэтому я закончил без ремесленника и возиться. Я использую Linux Ubuntu 12.04 LTS. Я установил все через командную строку. После этого я попытался запустить:

PHP ремесленника --version

Следующая проблема возникает:

[ErrorException]
Декларация App \ Провайдеры \ EventServiceProvider :: загрузки() должно быть compati ble with 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, и вы получите эту ошибку

Декларацию App \ Провайдеров \ EventServiceProvider :: загрузка() должна быть совместима с Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider :: boot

Вы определили класс App\Providers\EventServiceProvider. Этот класс имеет Illuminate\Foundation\Support\Providers\EventServiceProvider в качестве родителя/предка (с псевдонимом ServiceProvider в вашем классе).

Метод загрузки в ВашIlluminate\Foundation\Support\Providers\EventServiceProvider имеет набор аргументов. Вы определили boot в App\Providers\EventServiceProvider и каким-то образом изменили эти аргументы (меньшее количество аргументов, подсказки разных типов, разные/нет значений по умолчанию и т. Д.).

Вы не можете этого сделать.

Сделайте вас boot совместимым с родительским классом, и вы исправите свою проблему.

(Это, однако, не может решить все ваши проблемы, так как комментарии это звучит, как вы используете неизданные версию Laravel, которая может отличаться от того, что в учебнике)

+0

Алан Стром - где я могу найти Illuminate \ Foundation \ Support \ Providers \ EventServiceProvider, так что я знаю, что это точно проблема «там», а не в каком-то другом файле? Я не делал ничего .. Я еще не определил какую-либо загрузку, и теперь я не уверен, как я могу сделать свою «загрузку совместимой с родительским классом»? Я думаю, что я должен использовать Laravel 5.1 – DarioBB

+0

@DarioBB искать строку '' function boot "' в файле в файловой системе по пути в 'Illuminate/Foundation/Support/Providers \ EventServiceProvider.php' или что-то очень похожее на это , Из-за 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. Не забудьте применить правильные разрешения 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