首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Mashape/Unirest API包和界面

Laravel Mashape/Unirest API包和界面
EN

Stack Overflow用户
提问于 2014-05-03 19:43:38
回答 1查看 1.4K关注 0票数 0

如何在Laravel中实现外部包的接口?比方说,我想使用Mashape/Unirest API来分析文本,但将来我想切换到其他API提供商,并且不会对代码进行太多更改。

代码语言:javascript
复制
interface AnalyzerInterface {

    public function analyze(); //or send()?

}

class UnirestAnalyzer implements AnalyzerInterface {

    function __constructor(Unirest unirest){
        //this->...
    }

    function analyze($text, $lang) { 
        Unirest::post(.. getConfig() )
    }

    //some private methods to process data
}

那么,将该文件接口和UnirestAnalyzer放在哪里呢?为他们制作特殊的文件夹,添加到composer?添加命名空间?

EN

回答 1

Stack Overflow用户

发布于 2014-05-03 20:21:35

这就是我如何转到Interface并实现类似如下的东西:

代码语言:javascript
复制
interface AnalyzerInterface {

    public function analyze();
    public function setConfig($name, $value);

}

class UnirestAnalyzer implements AnalyzerInterface {

    private $unirest;

    private $config = [];

    public function __construct(Unirest unirest)
    {
        $this->unirest = $unirest;
    }

    public function analyze($text, $lang) 
    { 
        $this->unirest->post($this->config['var']);
    }

    public function setConfig($name, $value)
    {
        $this->config[$name] = $value;
    }

    //some private methods to process data
}

class Analyser {

    private $analizer;

    public function __construct(AnalyzerInterface analyzer)
    {
        $this->analyzer = $analyzer;

        $this->analyzer->setConfig('var', Config::get('var'));
    }

    public function analyze()
    {
        return $this->analyzer->analyze();
    }

}

你必须把它绑定到Laravel上:

代码语言:javascript
复制
App::bind('AnalyzerInterface', 'UnirestAnalyzer');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23443964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档