2

作为这篇文章的最后一条评论,它指出以下内容:

您可以在任何服务提供商中轻松完成此操作(引导将是一个不错的地方,因为我们可以使用基于方法的 DI)。

public function boot(\Illuminate\Contracts\Http\Kernel $kernel) {
 $kernel->appendMiddleware('Sheepy85\L5Localization\Middleware\Localization'); // prependMiddleware works too.
}

这是用于从服务提供者注入中间件的 Laravel 代码。

我正在尝试从Lumen Framework实现相同的目标,这是代码:

<?php namespace Acme\Slz\Providers;

use Illuminate\Contracts\Http\Kernel;
use Illuminate\Support\ServiceProvider;

class SlzServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     * @param Kernel $kernel
     * @return void
     */
    public function boot(Kernel $kernel)
    {
        // push the serializer middleware to the stack
        $kernel->pushMiddleware(Acme\Slz\Middleware\Serializer::class);
    }

    /**
     * Register any application services.
     * This service provider is a great spot to register your various container
     * bindings with the application. As you can see, we are registering our
     * @return void
     */
    public function register()
    {
    }
}

但这会引发以下错误:

lumen.ERROR: exception 'ErrorException' with message 'Argument 1 passed to Acme\Slz\Providers\SlzServiceProvider::boot() must be an instance of Illuminate\Contracts\Http\Kernel, none given

是否有更多的事情要做来启用 Lumen 的依赖容器?

4

1 回答 1

0

这个怎么样:

<?php namespace Acme\Slz\Providers;

use Illuminate\Support\ServiceProvider;

class SlzServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // push the serializer middleware to the stack
        $this->app->middleware([
            'serializer' => 'Acme\Slz\Middleware\Serializer',
        ]);
    }
}
于 2015-06-17T09:41:48.027 回答