laravel — PHP ремесленник вдруг не работает

Я начал изучать 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/general-discussion/l5-composer-update-ends-with-an-error-suddenly

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

но никогда ответ не давался напрямую и на самом деле я не понимаю, как решить эту проблему? Мне нужен прямой ответ, потому что я новичок в Ларавеле. Можно ли как-нибудь легко обновить artisan с помощью командной строки Linux, чтобы он снова мог работать?

10

Решение

Судя по всему, новый 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

9

Другие решения

Аналогично ответу @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

7

Я столкнулся с той же проблемой в forge при обновлении до 5.3, вам нужно избавиться от начальной загрузки / кеша, и, как вы упомянули, artisan не запустится из-за этой ошибки, поэтому вам нужно сделать это по-старому: rm -R bootstrap/cache а потом mkdir bootstrap/cache, Не забудьте применить правильные разрешения для начальной загрузки / кэша после того, как вы это сделали.

3

Говоря строго с точки зрения 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, которая может отличаться от той, что есть в руководстве)

2
По вопросам рекламы [email protected]