2017-04-21 40 views
1

我是新来的silex,uploadcare和github。我正在YouTube上接受关于将图片上传到我的社交网站的教程。 但我不断收到此错误。Interface'Silex ServiceProviderInterface'找不到

这是我的一些代码。

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(); 

我最近一直告诉我,我应该使用疙瘩,所以我想,

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

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

ServiceProviderInterface移出的Silex的不同版本之间,你需要使用疙瘩的一个代替:

use Pimple\ServiceProviderInterface;

更新的后续问题。

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

public function register(Silex\Application $app)

现在使用疙瘩的一个是:

public function register(Container $pimple)

幸运的PHP给出了一个错误信息,告诉你,如果有人试图继续使用Silex的版本,究竟出了什么问题的方法签名;-)

另外请注意,疙瘩的ServiceProviderInterface不需要长期boot方法要么。

文档: Silex/Providers > Creating a provider

+0

谢谢亚当,但现在我得到这个,KLEIDDER \供应商的声明\ UploadcareProvider ::注册()必须与疙瘩兼容\ ServiceProviderInterface ::注册(疙瘩\ $集装箱疙瘩) –

+0

错误消息告诉你*完全*问题是什么。我的意思不是懒惰,而是你真的*读过它*? –