Я начал изучать Laravel. До сих пор все работало отлично. Я следую этому уроку, и я застрял с эпизод 7.
Проблема в том, что я не могу больше заниматься ремесленничеством. Я попытался установить повозку, и я, вероятно, обновил ремесленника, поэтому я остался без ремесленника и повозиться. Я использую Linux Ubuntu 12.04 LTS. Я установил все через командную строку. После этого я попытался запустить:
PHP ремесленник — версия
Возникает следующая проблема:
[ErrorException] Объявление App \ Providers \ EventServiceProvider :: boot () должно быть
совместим с
Осветить \ Foundation \ Support \ Providers \ EventServiceProvider :: загрузки
()
Вот так мой файл 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": "^2.6@dev",
"vluzrmos/tinker": "dev-master",
"moon/artisan": "dev-master"
Я видел подобные проблемы здесь, например:
https://laracasts.com/discuss/channels/laravel/event-service-provider-in-package
но никогда ответ не давался напрямую и на самом деле я не понимаю, как решить эту проблему? Мне нужен прямой ответ, потому что я новичок в Ларавеле. Можно ли как-нибудь легко обновить artisan с помощью командной строки Linux, чтобы он снова мог работать?
Судя по всему, новый 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
Аналогично ответу @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*/);
}
Я столкнулся с той же проблемой в forge при обновлении до 5.3, вам нужно избавиться от начальной загрузки / кеша, и, как вы упомянули, artisan не запустится из-за этой ошибки, поэтому вам нужно сделать это по-старому: rm -R bootstrap/cache
а потом mkdir bootstrap/cache
, Не забудьте применить правильные разрешения для начальной загрузки / кэша после того, как вы это сделали.
Говоря строго с точки зрения PHP, когда artisan пытается запустить приложение CLI, и вы получаете эту ошибку
Объявление App \ Providers \ EventServiceProvider :: boot () должно быть совместимо с 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, которая может отличаться от той, что есть в руководстве)