How to Implement a Repository Interface in Magento 2?

Today, we’re going to teach you guys how to implement a repository interface in your Magento 2 store.

A repository is basically a service contract that helps to hide the business logic from the controller, model, and helper.

In this post, we’ll show you exactly how to implement a repository interface in your Magento 2 store.

Step-By-Step Process to Implement a Repository Interface in Magento 2

Please follow the below steps to learn how to implement the repository interface in your Magento 2 store.

Step - 1

First of all, create a di.xml file in the app/code/MageDelight/Hello/etc/ folder and paste the following code:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">

    <preference for="MageDelight\Hello\Api\TestRepositoryInterface" type="MageDelight\Hello\Model\TestRepositoryModel" />

</config>

With the above code, you’ll be creating the repository file, which is basically an interface class, and a model file where the methods are declared in the repository class.

Step - 2

After that, you need to create a TestRepositoryInterface.php file in the MageDelight\Hello\Api\ folder and paste the following code:

<?php

namespace MageDelight\Hello\Api;

interface TestRepositoryInterface

{

    /**

     * Create or update a data

     */

    public function save(\MageDelight\Hello\Api\Data\TestInterface $test);

    public function getById($testId);

    /**

     * Delete test.

     */

    public function delete(\MageDelight\Hello\Api\Data\TestInterface $test);

    /**

     * Delete test by ID.

     */

    public function deleteById($testId);

}

With the above code, you’ll be declaring the getById, deleteById, save, delete, etc. methods.

Step - 3

Next, create a TestRepositoryModel.php file in the MageDelight\Hello\Model\ folder and paste the following code:

namespace MageDelight\Hello\Model;

class TestRepositoryModel implements \MageDelight\Hello\Api\TestRepositoryInterface

{

    /**

     * Save test data.

     */

    public function save(\MageDelight\Hello\Api\Data\TestInterface $test)

    {

        //your code

    }

    /**

     * Retrieve test data.

     */

    public function getById($testId)

    {

        //your code

    }

    /**

     * Delete test.

     */

    public function delete(\MageDelight\Hello\Api\Data\TestInterface $test)

    {

        //your code

    }

    /**

     * Delete test by test ID.

     */

    public function deleteById($testId)

    {

        //your code

    }

}

The above code will simply define all methods in your repository class we declared earlier and the final repository will be created for your module.

Step - 4

Now, let’s say that you have a test id of a controller and you’d like to use deleteById() function through the repository.

Here’s how you can do it:

namespace MageDelight\Hello\Controller\test;

use MageDelight\Hello\Api\TestRepositoryInterface;

class Delete extends Action

{

    protected $_testReporitory;

    public function __construct(

        Context $context,

        TestRepositoryInterface $testReporitory

    ) {

        $this->_testReporitory = $testReporitory;

        parent::__construct(

            $context

        );

    }

    public function execute()

    {

        try {

            $testId = 10;//any id

            $this->_testReporitory->deleteById($testId);

        } catch (\Exception $e) {

            $this->messageManager->addException($e, $e->getMessage());

        }

    }

}

Conclusion

And that’s about it!

This is the most straightforward way to implement/create a repository interface in a Magento 2 store.

We hope that you found this tutorial helpful. However, if you still need our professional assistance with Magento 2 Development, be sure to reach out to us for help at any time.