FOSElasticaBundle/Resources/doc/cookbook/manual-provider.md
CedCannes 7471c13d75 Update manual-provider.md
Typo in class path
2015-01-22 09:22:34 +11:00

1.4 KiB

Manual provider

Create a service with the tag "fos_elastica.provider" and attributes for the index and type for which the service will provide.

# app/config/config.yml
services:
    acme.search_provider.user:
        class: Acme\UserBundle\Provider\UserProvider
        arguments:
            - @fos_elastica.index.website.user
        tags:
            - { name: fos_elastica.provider, index: website, type: user }

Its class must implement FOS\ElasticaBundle\Provider\ProviderInterface.


namespace Acme\UserBundle\Provider;

use FOS\ElasticaBundle\Provider\ProviderInterface;
use Elastica\Type;
use Elastica\Document;

class UserProvider implements ProviderInterface
{
    protected $userType;

    public function __construct(Type $userType)
    {
        $this->userType = $userType;
    }

    /**
     * Insert the repository objects in the type index
     *
     * @param \Closure $loggerClosure
     * @param array    $options
     */
    public function populate(\Closure $loggerClosure = null, array $options = array())
    {
        if ($loggerClosure) {
            $loggerClosure('Indexing users');
        }

        $document = new Document();
        $document->setData(array('username' => 'Bob'));
        $this->userType->addDocuments(array($document));
    }
}

You will find a more complete implementation example in src/FOS/ElasticaBundle/Doctrine/AbstractProvider.php.