2017-04-04 01:09
浏览 42

在Laravel中实现与Cache :: disk('x')类似的功能

This is just a general question around a solution I'm trying to find.

I have potentially many providers of the same type of service and I need a way to be able to have a default, but then also manually call a switcher method to change them.

Currently, I've bound an Interface to an Implementation via configuration settings and this works well - but it means I can only support one active provider per type of service.

I noticed the Cache::disk() method is really what I'm looking for, but I'm not sure where this type of switch method should be defined.


interface IProvider {

    public function getServiceInfo($args);

    public function setServiceInfo($args);


class GoldService implements IProvider {
    // implementation of the two interface methods


class SilverService implements IProvider {


// ProviderServiceProvider

public function register()

// Controller

public function getServiceInfo(Service $serviceId) 
    $provider = $app->make('App/IProvider');

Want to have.

// What I want to be able to do
public function getServiceInfo(Service $serviceId)
    // Using a facade

    if ($serviceId > 100)

I know I've thrown in an additional requirement there of the Facade - not sure if I've confused Contracts/Facades here - but essentially I want the interface to enforce the instance methods, but Facade for easy access to the instances.

Not really looking for code here - that'll be the easy part. I'm just not sure I've really grok'd this and looking for a nudge in the right direction..

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

  • dpz1983 2017-04-04 01:20

    Using an interface to ensure a service implements the methods you require makes sense.

    But with regard to using a different service based on the properties of an object instance; that sounds more like the Factory pattern to me.


    解决 无用
    打赏 举报

相关推荐 更多相似问题