8. Repository

8.1. Create a Custom Repository class for your resource

<?php

/*
 * This file is part of the Openjet package.
 *
 * (c) Openjet SA
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Openjet\Bundle\AppBundle\Repository\User;

use Openjet\Bundle\AppBundle\Doctrine\ORM\EntityRepository;
use Openjet\Component\User\Repository\UserRepositoryInterface;

class UserRepository extends EntityRepository implements UserRepositoryInterface
{
    /**
     * {@inheritdoc}
     */
    public function findOneByEmail($email)
    {
        return parent::findOneBy(['email' => $email]);
    }
}

8.2. Configure the repository for your resource

openjet_resource:
    resources:
        user:
            classes:
                repository: Openjet\Bundle\AppBundle\Repository\User\UserRepository

8.3. Use the new method of the repository in routing

openjet_user_show:
    path: /users/{email}
    methods: [GET]
    defaults:
        _controller: openjet.controller.user:showAction
        _sylius:
            repository:
                method: findOneByEmail
                arguments: [$email]

8.4. What happens while overriding Repositories?

  • The parameter openjet.repository.user.class contains Openjet\Bundle\AppBundle\Repository\User\UserRepository.
  • The repository service openjet.repository.user is using your new class.
  • Under the openjet.repository.user service you have got all methods from the base repository available and all you have added.