for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Portiny\GraphQL\Provider;
use Portiny\GraphQL\Contract\Mutation\MutationFieldInterface;
use Portiny\GraphQL\Contract\Provider\MutationFieldsProviderInterface;
use Portiny\GraphQL\Converter\MutationFieldConverter;
use Portiny\GraphQL\Exception\Provider\ExistingMutationFieldException;
final class MutationFieldsProvider implements MutationFieldsProviderInterface
{
/**
* @var MutationFieldInterface[]
*/
private $fields = [];
* {@inheritdoc}
public function addField(MutationFieldInterface $mutationField): void
$this->ensureFieldIsNotRegistered($mutationField);
$this->fields[$mutationField->getName()] = $mutationField;
}
public function getFields(): array
return $this->fields;
public function getField(string $name): ?MutationFieldInterface
return $this->fields[$name] ?? null;
public function convertFieldsToArray(?array $allowedMutations = null): array
$fields = [];
foreach ($this->getFields() as $field) {
if (is_array($allowedMutations) && ! in_array(get_class($field), $allowedMutations, true)) {
continue;
$fields += MutationFieldConverter::toArray($field);
return $fields;
* @throws ExistingMutationFieldException
private function ensureFieldIsNotRegistered(MutationFieldInterface $mutationField): void
if (isset($this->fields[$mutationField->getName()])) {
throw new ExistingMutationFieldException(
sprintf('Mutation field with name "%s" is already registered.', $mutationField->getName())
);