我已经开始学习Laravel了。到目前为止,一切都运作良好。我按照本教程操作,并且遇到了episode 7。
问题在于我不能再开始工匠了。我试图安装修补匠,我可能已经更新了工匠,所以我最终没有工匠和修补。我使用的是Linux Ubuntu 12.04 LTS。我已经通过命令行安装了所有内容。之后我试着跑:
php artisan --version
出现以下问题:
[ErrorException]
App \ Providers \ EventServiceProvider :: boot()的声明应该是 兼容 照亮\基金会的\ Support \供应商\ 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
但从来没有直接给出答案,实际上我不明白如何解决这个问题?我需要直接回答,因为我是Laravel的新手。可以通过Linux命令行以某种方式更新工匠,以便它可以再次工作吗?
答案 0 :(得分: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
答案 1 :(得分:8)
类似于@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*/);
}
答案 2 :(得分:3)
我在执行升级到5.3时遇到了同样的问题,你需要摆脱bootstrap / cache,正如你所提到的那样,artisan不会因为那个错误而启动,所以你需要以旧的方式去做:{ {1}}然后rm -R bootstrap/cache
。完成后不要忘记应用bootstrap / cache的正确权限。
答案 3 :(得分:2)
严格地说,从PHP的角度来看,当工匠尝试启动其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版本,可能与教程中的版本不同)