List Provider

By default the list configuration is read from the config.yml when correctly defined according to configuring your lists. This is done by the default list provider (ConfigListProvider). If you want to use a diffrent source for your list config you can create your own List Provider that should implement Welp\MailChimpBundle\Provider\ListProviderInterface.

<?php

namespace Welp\MailchimpBundle\Provider;

/**
 * List provider interface
 */
interface ListProviderInterface
{
    /**
     * Get all the available Mailchimp lists
     * @return array of SubscriberListInterface
     */
    public function getLists();

    /**
     * Get one Mailchimp list by id
     * @return SubscriberListInterface
     */
    public function getList($listId);
}

With your own implementation you could for example fetch your list configuration from Doctrine. Example implementation:

<?php

namespace YourApp\App\Provider;

use Doctrine\ORM\EntityManagerInterface;
use Welp\MailchimpBundle\Provider\ListProviderInterface;
use Welp\MailchimpBundle\Provider\ProviderInterface;

class DoctrineListProvider implements ListProviderInterface
{

    private $em;
    private $listEntity;
    private $subscriberProvider;

    public function __construct(EntityManagerInterface $entityManager, $listEntity, ProviderInterface $subscriberProvider)
    {
        $this->em = $entityManager;
        $this->listEntity = $listEntity;
        $this->subscriberProvider = $subscriberProvider;
    }

    /**
     * {@inheritdoc}
     */
    public function getList($listId)
    {
        $list = $this->em->getRepository($this->listEntity)->findOneByListId($listId);
        $list->setProvider($this->subscriberProvider);
        return $list;
    }

    /**
     * {@inheritdoc}
     */
    public function getLists()
    {
        $lists = $this->em->getRepository($this->listEntity)->findAll();
        foreach($lists as $list)
        {
            //add the provider to the list
            $list->setProvider($this->subscriberProvider);
        }
        return $lists;
    }   
}
Got your SubscriberProvider service key saved as a string with your list config ?
Make use of the ProviderFactory to get the the service:
$provider = $this->providerFactory->create($providerServiceKey);

Define your List provider as a service:

doctrine.list.provider:
    class: YourApp\App\Provider\DoctrineListProvider
    public: true
    arguments:
        - '@doctrine.orm.entity_manager'
        - 'YourApp\App\Entity\SubscriberList'
        - '@example_user_provider'

After this, don't forget to add the service key for your provider into your config.yml:

    welp_mailchimp:
        api_key: ...
        list_provider: 'doctrine.list.provider'
        ...