2016-05-21 36 views
2

我有一個名爲Sharer的類,它在構造方法中接受Service接口。 Service可以是FacebookServiceTwitterService等等。每個Service類都有一個post方法,該方法使用自己的連接(在本例中爲facebook或twitter)傳遞傳遞給該方法的所有數組數據。如何在Laravel中有效地構造此代碼?

現在將Sharernormalizes數據發送給那個service的post方法。通過規範化,它會檢查我們發送給post方法的東西是僅僅是一個簡單的數組還是一個Model類。 Model可以是Project型號,或Image型號,或Video型號等。

如果它是模型類,那麼它會調用該特定模型的變換器。 Transformers只是幫助程序類,它接受模型實例,並且它們有兩種方法 - 在這種情況下爲facebooktwitter。每個方法都會返回一個特定於連接的格式化數組。

因此,例如,facebook方法從模型中抓取所需的字段(需要在Facebook上發佈)並將該數組發回。而Twitter方法對twitter的必填字段也是如此。

現在,我有點卡住的事情是調用變壓器類的具體方法。我想要做這樣的事情:

if(we are sharing on facebook) { 
    then call the facebook method 
} 

if(we are sharing on twitter) { 
    then call the twitter method 
} 

但很明顯,我想以某種方式使其動態和if語句不具備這些。什麼是更好的方法呢?

回答

0

我解決了它這樣做:

$method = $this->resolveMethodToCall(); 

protected function resolveMethodToCall() 
{ 
    $reflection = new ReflectionClass($this->service); // service being either a FacebookService class or TwitterService 

    $shortName = $reflection->getShortName(); 

    return strtolower(str_replace('Service', '', $shortName)); 
} 

可能不是最好的解決辦法,但效果很好,並在此之後,我檢查,如果該解決方法確實存在變壓器類,並拋出一個異常,如果它不」噸。