接口' Silex \ ServiceProviderInterface'未找到

时间:2017-04-21 15:24:04

标签: php silex

我是silex,uploadcare和github的新手。我正在youtube上关于将图像上传到我的社交网站的教程。 但我一直收到这个错误。

以下是我的一些代码。

namespace KLEIDDER\Providers;


use Silex\Application;
use Silex\ServiceProviderInterface;

class UploadcareProvider implements ServiceProviderInterface
{
    public function register(Application $app)
    {
        $app['uploadcare'] = $app->share(function() use ($app) {

            return new \Uploadcare\Api('6854166a3c2cd467beb8', '416e1509f07b6b17cbe0');

        });

    }
    public  function boot(Application $app)
    {


    }

}
来自index.php页面

$app->register(new KLEIDDER\Providers\UploadcareProvider);

$app->get('/', function() use ($app) {

    var_dump($app['uploadcare']);
    die();

我最近被告知我应该使用Pimple,所以我尝试了

namespace KLEIDDER\Providers;


use Silex\Application;
use Pimple\ServiceProviderInterface;

class UploadcareProvider implements ServiceProviderInterface
{
public function register(Application $app)
{
    $app['uploadcare'] = $app->share(function() use ($app) {

        return new \Uploadcare\Api('6854166a3c2cd467beb8', '416e1509f07b6b17cbe0');

    });

}
public  function boot(Application $app)
{


}

}

但现在我收到此错误,致命错误:KLEIDDER \ Providers \ UploadcareProvider :: register()的声明必须与Pimple \ ServiceProviderInterface :: register(Pimple \ Container $ pimple)兼容

1 个答案:

答案 0 :(得分:1)

看起来您已经安装了Silex 1.x代码,并安装了Silex 2.x.

版本ServiceProviderInterface之间从Silex转出,你需要使用Pimple的一个:

use Pimple\ServiceProviderInterface;

更新后续问题。

显然Pimple\ServiceProviderInterfaceSilex\ServiceProviderInterface不同,因此您需要相应地重新编码您的课程。主要区别在于register方法的方法签名已经等效地更改了。在Silex下,它是:

public function register(Silex\Application $app)

现在使用Pimple的一个是:

public function register(Container $pimple)

幸运的是,如果有人试图继续使用方法签名的Silex版本,PHP会给出一条错误消息,告诉您确切的错误; - )

另请注意,Pimple的ServiceProviderInterface也不再需要boot方法。

文档: Silex / Providers > Creating a provider