11

我已经开始学习 Laravel。到现在为止,一切都很完美。我正在关注本教程,但我坚持使用第 7 集

问题是我不能再开始工匠了。我试图安装 tinker,我可能已经更新了 artisan,所以我最终没有 artisan 和 tinker。我正在使用 Linux Ubuntu 12.04 LTS。我已经通过命令行安装了所有东西。之后我尝试运行:

php工匠--版本

出现以下问题:

[ErrorException]
App\Providers\EventServiceProvider::boot() 的声明应该与 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": "^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

但从来没有直接给出答案,实际上我不明白如何解决这个问题?我需要直接回答,因为我是 Laravel 的新手。可以使用 Linux 命令行以某种方式轻松更新 artisan 以便它可以再次工作吗?

4

4 回答 4

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

于 2016-08-09T06:37:08.530 回答
8

类似于@greut 的答案,但是如果是升级 laravel 引起的(如果你是通过安装其他包composer update并且你的 laravel 版本可能会触发dev-master),有两个地方需要更改参数。

App\Providers\RouteServiceProvider
App\Providers\EventServiceProvider

在这两个控制器中,都有一个名为boot(). 将参数更改为空。IE

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

于 2016-10-25T09:14:18.930 回答
3

在升级到 5.3 时,我在 forge 中遇到了同样的问题,您需要摆脱引导程序/缓存,并且正如您提到的那样,由于该错误,工匠不会启动,因此您需要以旧方式进行操作:rm -R bootstrap/cache然后mkdir bootstrap/cache. 完成后不要忘记应用正确的引导/缓存权限。

于 2016-10-17T16:33:43.250 回答
2

从 PHP 的角度严格来说,当 artisan 尝试启动其 CLI 应用程序时,您会收到此错误

App\Providers\EventServiceProvider::boot() 的声明应该与 Illuminate\Foundation\Support\Providers\EventServiceProvider::boot 兼容

你已经定义了一个类App\Providers\EventServiceProvider。此类具有Illuminate\Foundation\Support\Providers\EventServiceProvider作为父母/祖先(ServiceProvider在您的班级中别名)。

的 boot 方法Illuminate\Foundation\Support\Providers\EventServiceProvider有一组参数。您已在 中定义bootApp\Providers\EventServiceProvider并以某种方式更改了这些参数(更少的参数、不同的类型提示、不同/无默认值等)。

你不能那样做。

让你boot与父类兼容,你就会解决你的问题。

(但是,这可能无法解决您的所有问题,因为这些评论听起来像是您使用的是未发布版本的 Laravel,可能与教程中的不同)

于 2015-08-25T20:31:20.707 回答