27
loading...
This website collects cookies to deliver better user experience
\{Vendor}\{Module}\Api\{EntityName}RepositoryInterface
. É recomendado que a interface da entidade esteja criada e sobrescrita na sua respectiva Model para que possa ser usada a tipagem na classe de repositório.<?php
namespace {Vendor}\{Module}\Api;
use {Vendor}\{Module}\Model\{EntityName};
interface {EntityName}RepositoryInterface
{
public function getById(int $id): {EntityName};
public function save({EntityName} $object): {EntityName};
public function delete({EntityName} $object): bool;
public function deleteById(int $id): bool;
}
di.xml
, para que o arquivo fique devidamente implementado e possa descrever em como os métodos serão executados.<preference for="{Vendor}\{Module}\Api\{EntityName}RepositoryInterface" type="{Vendor}\{Module}\Model\{EntityName}Repository" />
di.xml
, falta apenas implementar os métodos da interface na classe do repositório.<?php
namespace {Vendor}\{Module}\Model;
use {Vendor}\{Module}\Api\{EntityName}RepositoryInterface;
use {Vendor}\{Module}\Model\{ModelName}Factory;
use {Vendor}\{Module}\Model\ResourceModel\{ResourceModelName};
use {Vendor}\{Module}\Model\{EntityName};
use Magento\Framework\Exception\NoSuchEntityException;
use Magento\Framework\Exception\CouldNotSaveException;
use Magento\Framework\Exception\CouldNotDeleteException;
class {EntityName}Repository implements {EntityName}RepositoryInterface
{
private {ModelName}Factory $modelNameFactory;
private {ResourceModelName} $resourceModelName;
public function __construct(
{ModelName}Factory $modelNameFactory,
{ResourceModelName} $resourceModelName
) {
$this->modelNameFactory = $modelNameFactory;
$this->resourceModelName = $resourceModelName;
}
public function getById(int $id): {EntityName}
{
$entity = $this->modelNameFactory->create();
$this->resourceModelName->load($entity, $id);
if(!$entity->getId()) {
throw NoSuchEntityException::singleField('{entity_column_id}', $id);
}
return $entity;
}
public function save({EntityName} $entity): {EntityName}
{
try {
$entity->getResource()->save($entity);
} catch (\Exception $exception) {
throw new CouldNotSaveException(
__('Unable to save object. Error: %1', $exception->getMessage())
);
}
return $entity;
}
public function delete({EntityName} $entity): bool
{
try {
$this->resourceModelName->delete($entity);
} catch (\Exception $exception) {
throw new CouldNotDeleteException(__(
'Unable to remove object with ID %1. Error: %2',
$entity->getId(),
$exception->getMessage()
));
}
return true;
}
public function deleteById(int $id): bool
{
$entity = $this->getById($id);
return $this->delete($entity);
}
}
Valores entre chaves ({test}
) devem ser alterados na implementação do código.
rm -rf var/generation/
rm -rf generated/
php bin/magento setup:di:compile
- app/
- code/
- {Vendor}/
- {Module}/
- Api/
- {EntityName}RepositoryInterface.php
- etc/
- di.xml
- module.xml
- Model/
- {EntityName}Repository.php
- {EntityName}.php
- ResourceModel/
- {EntityName}.php
- {EntityName}/
- Collection.php
- registration.php
- composer.json