diff --git a/.ddev/example/Controller/Admin/BlogArticleCrudController.php b/.ddev/example/Controller/Admin/BlogArticleCrudController.php index 0c42076a32..ed32e2b76d 100644 --- a/.ddev/example/Controller/Admin/BlogArticleCrudController.php +++ b/.ddev/example/Controller/Admin/BlogArticleCrudController.php @@ -15,6 +15,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Filter\EntityFilter; +/** + * @extends AbstractCrudController + */ #[AdminCrud(routePath: '/blog-article')] class BlogArticleCrudController extends AbstractCrudController { diff --git a/.ddev/example/Controller/Admin/CategoryCrudController.php b/.ddev/example/Controller/Admin/CategoryCrudController.php index 1f4d1be22d..5cc9acdfd3 100644 --- a/.ddev/example/Controller/Admin/CategoryCrudController.php +++ b/.ddev/example/Controller/Admin/CategoryCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\AssociationField; use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; +/** + * @extends AbstractCrudController + */ #[AdminCrud(routePath: '/category')] class CategoryCrudController extends AbstractCrudController { diff --git a/doc/dashboards.rst b/doc/dashboards.rst index 7350e9e67d..935072e262 100644 --- a/doc/dashboards.rst +++ b/doc/dashboards.rst @@ -982,8 +982,8 @@ user locale. You can also use ``TranslatableMessage`` objects to define any text content in your backends (e.g. the label of some field, the help contents of some page, etc.):: - use function Symfony\Component\Translation\t; use Symfony\Component\Translation\TranslatableMessage; + use function Symfony\Component\Translation\t; // creating translatable messages using objects TextField::new('firstName', new TranslatableMessage('Name')) diff --git a/src/Contracts/Controller/CrudControllerInterface.php b/src/Contracts/Controller/CrudControllerInterface.php index ca62fb81db..f00aff07b0 100644 --- a/src/Contracts/Controller/CrudControllerInterface.php +++ b/src/Contracts/Controller/CrudControllerInterface.php @@ -22,9 +22,14 @@ /** * @author Javier Eguiluz + * + * @template TEntity of object */ interface CrudControllerInterface { + /** + * @return class-string + */ public static function getEntityFqcn(): string; public function configureCrud(Crud $crud): Crud; @@ -65,10 +70,19 @@ public function createIndexQueryBuilder(SearchDto $searchDto, EntityDto $entityD public function createEntity(string $entityFqcn); + /** + * @param TEntity $entityInstance + */ public function updateEntity(EntityManagerInterface $entityManager, $entityInstance): void; + /** + * @param TEntity $entityInstance + */ public function persistEntity(EntityManagerInterface $entityManager, $entityInstance): void; + /** + * @param TEntity $entityInstance + */ public function deleteEntity(EntityManagerInterface $entityManager, $entityInstance): void; public function createEditFormBuilder(EntityDto $entityDto, KeyValueStore $formOptions, AdminContext $context): FormBuilderInterface; diff --git a/src/Contracts/Event/EntityLifecycleEventInterface.php b/src/Contracts/Event/EntityLifecycleEventInterface.php index 5c653267ef..9e58656406 100644 --- a/src/Contracts/Event/EntityLifecycleEventInterface.php +++ b/src/Contracts/Event/EntityLifecycleEventInterface.php @@ -4,8 +4,13 @@ /** * @author: Benjamin Leibinger + * + * @template TEntity of object */ interface EntityLifecycleEventInterface { + /** + * @return TEntity + */ public function getEntityInstance(); } diff --git a/src/Controller/AbstractCrudController.php b/src/Controller/AbstractCrudController.php index d25f104853..ac32256bd5 100644 --- a/src/Controller/AbstractCrudController.php +++ b/src/Controller/AbstractCrudController.php @@ -65,6 +65,10 @@ /** * @author Javier Eguiluz + * + * @template TEntity of object + * + * @implements CrudControllerInterface */ abstract class AbstractCrudController extends AbstractController implements CrudControllerInterface { diff --git a/src/Dto/EntityDto.php b/src/Dto/EntityDto.php index e2a0818ac9..9ebba8f612 100644 --- a/src/Dto/EntityDto.php +++ b/src/Dto/EntityDto.php @@ -21,12 +21,17 @@ /** * @author Javier Eguiluz + * + * @template TEntity of object */ final class EntityDto { private bool $isAccessible = true; + /** @var class-string */ private string $fqcn; + /** @var ClassMetadata */ private ClassMetadata $metadata; + /** @var TEntity|null */ private $instance; private $primaryKeyName; private mixed $primaryKeyValue = null; @@ -34,6 +39,11 @@ final class EntityDto private ?FieldCollection $fields = null; private ?ActionCollection $actions = null; + /** + * @param class-string $entityFqcn + * @param ClassMetadata $entityMetadata + * @param TEntity|null $entityInstance + */ public function __construct(string $entityFqcn, ClassMetadata $entityMetadata, string|Expression|null $entityPermission = null, /* ?object */ $entityInstance = null) { if (!\is_object($entityInstance) @@ -61,6 +71,9 @@ public function __toString(): string return $this->toString(); } + /** + * @return class-string + */ public function getFqcn(): string { return $this->fqcn; @@ -84,6 +97,9 @@ public function toString(): string return sprintf('%s #%s', $this->getName(), substr($this->getPrimaryKeyValueAsString(), 0, 16)); } + /** + * @return TEntity|null + */ public function getInstance()/* : ?object */ { return $this->instance; @@ -246,6 +262,9 @@ public function isEmbeddedClassProperty(string $propertyName): bool return \array_key_exists($propertyNameParts[0], $this->metadata->embeddedClasses); } + /** + * @param TEntity|null $newEntityInstance + */ public function setInstance(?object $newEntityInstance): void { if (null !== $this->instance && null !== $newEntityInstance && !$newEntityInstance instanceof $this->fqcn) { @@ -256,6 +275,9 @@ public function setInstance(?object $newEntityInstance): void $this->primaryKeyValue = null; } + /** + * @param TEntity $newEntityInstance + */ public function newWithInstance(/* object */ $newEntityInstance): self { if (!\is_object($newEntityInstance)) { diff --git a/src/Event/AbstractLifecycleEvent.php b/src/Event/AbstractLifecycleEvent.php index f6430b7ebf..6340720af0 100644 --- a/src/Event/AbstractLifecycleEvent.php +++ b/src/Event/AbstractLifecycleEvent.php @@ -6,11 +6,21 @@ /** * @author: Benjamin Leibinger + * + * @template TEntity of object + * + * @implements EntityLifecycleEventInterface */ abstract class AbstractLifecycleEvent implements EntityLifecycleEventInterface { + /** + * @var TEntity + */ protected $entityInstance; + /** + * @param TEntity $entityInstance + */ public function __construct(/* ?object */ $entityInstance) { if (!\is_object($entityInstance) diff --git a/src/Security/SecurityVoter.php b/src/Security/SecurityVoter.php index 0d16c07496..a1ce73812c 100644 --- a/src/Security/SecurityVoter.php +++ b/src/Security/SecurityVoter.php @@ -12,7 +12,7 @@ use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; use Symfony\Component\Security\Core\Authorization\Voter\Voter; -/* +/** * @author Javier Eguiluz */ final class SecurityVoter extends Voter diff --git a/tests/PrettyUrlsTestApplication/src/Controller/BlogPostCrudController.php b/tests/PrettyUrlsTestApplication/src/Controller/BlogPostCrudController.php index 44adb39e1a..188fa7e6e3 100644 --- a/tests/PrettyUrlsTestApplication/src/Controller/BlogPostCrudController.php +++ b/tests/PrettyUrlsTestApplication/src/Controller/BlogPostCrudController.php @@ -9,6 +9,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\PrettyUrlsTestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class BlogPostCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/PrettyUrlsTestApplication/src/Controller/CategoryCrudController.php b/tests/PrettyUrlsTestApplication/src/Controller/CategoryCrudController.php index 96841a58f2..2367b4128e 100644 --- a/tests/PrettyUrlsTestApplication/src/Controller/CategoryCrudController.php +++ b/tests/PrettyUrlsTestApplication/src/Controller/CategoryCrudController.php @@ -16,6 +16,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Tests\PrettyUrlsTestApplication\Entity\Category; use Symfony\Component\HttpFoundation\Response; +/** + * @extends AbstractCrudController + */ class CategoryCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/PrettyUrlsTestApplication/src/Controller/UserCrudController.php b/tests/PrettyUrlsTestApplication/src/Controller/UserCrudController.php index 2147722ebc..40f545dc27 100644 --- a/tests/PrettyUrlsTestApplication/src/Controller/UserCrudController.php +++ b/tests/PrettyUrlsTestApplication/src/Controller/UserCrudController.php @@ -13,6 +13,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Tests\PrettyUrlsTestApplication\Entity\User; use Symfony\Component\HttpFoundation\Response; +/** + * @extends AbstractCrudController + */ #[AdminCrud('/user-editor', 'external_user_editor')] class UserCrudController extends AbstractCrudController { diff --git a/tests/TestApplication/src/Controller/ActionsCrudController.php b/tests/TestApplication/src/Controller/ActionsCrudController.php index 1c4d7d512d..a359fde681 100644 --- a/tests/TestApplication/src/Controller/ActionsCrudController.php +++ b/tests/TestApplication/src/Controller/ActionsCrudController.php @@ -12,6 +12,8 @@ /** * Tests the configureActions() method and the generated actions. + * + * @extends AbstractCrudController */ class ActionsCrudController extends AbstractCrudController { diff --git a/tests/TestApplication/src/Controller/AssetsController.php b/tests/TestApplication/src/Controller/AssetsController.php index 5fd3af9f4d..2e9f194d5e 100644 --- a/tests/TestApplication/src/Controller/AssetsController.php +++ b/tests/TestApplication/src/Controller/AssetsController.php @@ -9,6 +9,8 @@ /** * Tests all the different ways of configuring asn customizing the assets. + * + * @extends AbstractCrudController */ class AssetsController extends AbstractCrudController { diff --git a/tests/TestApplication/src/Controller/BlogPostCrudController.php b/tests/TestApplication/src/Controller/BlogPostCrudController.php index edfd9bf161..e24cbde790 100644 --- a/tests/TestApplication/src/Controller/BlogPostCrudController.php +++ b/tests/TestApplication/src/Controller/BlogPostCrudController.php @@ -9,6 +9,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class BlogPostCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/CategoryCrudController.php b/tests/TestApplication/src/Controller/CategoryCrudController.php index e9173f9e04..c42058a8b9 100644 --- a/tests/TestApplication/src/Controller/CategoryCrudController.php +++ b/tests/TestApplication/src/Controller/CategoryCrudController.php @@ -18,6 +18,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Category; use Symfony\Component\HttpFoundation\Response; +/** + * @extends AbstractCrudController + */ class CategoryCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/CustomFieldAttributeCrudController.php b/tests/TestApplication/src/Controller/CustomFieldAttributeCrudController.php index ef24cad248..a627b064ec 100644 --- a/tests/TestApplication/src/Controller/CustomFieldAttributeCrudController.php +++ b/tests/TestApplication/src/Controller/CustomFieldAttributeCrudController.php @@ -7,6 +7,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class CustomFieldAttributeCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/ErrorFieldDoesNotBelongToAnyTabCrudController.php b/tests/TestApplication/src/Controller/ErrorFieldDoesNotBelongToAnyTabCrudController.php index f4464ae830..2253ed9661 100644 --- a/tests/TestApplication/src/Controller/ErrorFieldDoesNotBelongToAnyTabCrudController.php +++ b/tests/TestApplication/src/Controller/ErrorFieldDoesNotBelongToAnyTabCrudController.php @@ -7,6 +7,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Category; +/** + * @extends AbstractCrudController + */ class ErrorFieldDoesNotBelongToAnyTabCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/FormFieldHelpController.php b/tests/TestApplication/src/Controller/FormFieldHelpController.php index c22440389e..7bffb2e822 100644 --- a/tests/TestApplication/src/Controller/FormFieldHelpController.php +++ b/tests/TestApplication/src/Controller/FormFieldHelpController.php @@ -13,6 +13,8 @@ /** * Used to test the ->setHelp() method of fields and how that * help message is rendered in the form. + * + * @extends AbstractCrudController */ class FormFieldHelpController extends AbstractCrudController { diff --git a/tests/TestApplication/src/Controller/FormFieldLabelController.php b/tests/TestApplication/src/Controller/FormFieldLabelController.php index 1dd7c1760c..d9fb2f77a6 100644 --- a/tests/TestApplication/src/Controller/FormFieldLabelController.php +++ b/tests/TestApplication/src/Controller/FormFieldLabelController.php @@ -13,6 +13,8 @@ /** * Used to test the different types of labels that fields can configure. + * + * @extends AbstractCrudController */ class FormFieldLabelController extends AbstractCrudController { diff --git a/tests/TestApplication/src/Controller/FormFieldValueController.php b/tests/TestApplication/src/Controller/FormFieldValueController.php index 18932fbea6..9c60605266 100644 --- a/tests/TestApplication/src/Controller/FormFieldValueController.php +++ b/tests/TestApplication/src/Controller/FormFieldValueController.php @@ -7,6 +7,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class FormFieldValueController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/FormFieldsetsCrudController.php b/tests/TestApplication/src/Controller/FormFieldsetsCrudController.php index 9527b8c3ea..332e5e9cc0 100644 --- a/tests/TestApplication/src/Controller/FormFieldsetsCrudController.php +++ b/tests/TestApplication/src/Controller/FormFieldsetsCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class FormFieldsetsCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Search/AnyTermsCrudSearchController.php b/tests/TestApplication/src/Controller/Search/AnyTermsCrudSearchController.php index 6f0a75396c..6889dc98c5 100644 --- a/tests/TestApplication/src/Controller/Search/AnyTermsCrudSearchController.php +++ b/tests/TestApplication/src/Controller/Search/AnyTermsCrudSearchController.php @@ -7,6 +7,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class AnyTermsCrudSearchController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Search/CustomCrudSearchController.php b/tests/TestApplication/src/Controller/Search/CustomCrudSearchController.php index b193f1e23d..1693ccc606 100644 --- a/tests/TestApplication/src/Controller/Search/CustomCrudSearchController.php +++ b/tests/TestApplication/src/Controller/Search/CustomCrudSearchController.php @@ -6,6 +6,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class CustomCrudSearchController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Search/DefaultCrudSearchController.php b/tests/TestApplication/src/Controller/Search/DefaultCrudSearchController.php index ae78a825bd..ddc3311cf3 100644 --- a/tests/TestApplication/src/Controller/Search/DefaultCrudSearchController.php +++ b/tests/TestApplication/src/Controller/Search/DefaultCrudSearchController.php @@ -6,6 +6,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class DefaultCrudSearchController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Search/IdTermCrudSearchController.php b/tests/TestApplication/src/Controller/Search/IdTermCrudSearchController.php index bedf9d868c..7c507465bd 100644 --- a/tests/TestApplication/src/Controller/Search/IdTermCrudSearchController.php +++ b/tests/TestApplication/src/Controller/Search/IdTermCrudSearchController.php @@ -6,6 +6,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractCrudController; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\BlogPost; +/** + * @extends AbstractCrudController + */ class IdTermCrudSearchController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Sort/BillCrudController.php b/tests/TestApplication/src/Controller/Sort/BillCrudController.php index fc26b7a9f5..9b1384cb30 100644 --- a/tests/TestApplication/src/Controller/Sort/BillCrudController.php +++ b/tests/TestApplication/src/Controller/Sort/BillCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Bill; +/** + * @extends AbstractCrudController + */ class BillCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Sort/CustomerCrudController.php b/tests/TestApplication/src/Controller/Sort/CustomerCrudController.php index 0fd4e95b5e..d3ec836b5d 100644 --- a/tests/TestApplication/src/Controller/Sort/CustomerCrudController.php +++ b/tests/TestApplication/src/Controller/Sort/CustomerCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Customer; +/** + * @extends AbstractCrudController + */ class CustomerCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Sort/PageCrudController.php b/tests/TestApplication/src/Controller/Sort/PageCrudController.php index 865e241846..e78824fbcc 100644 --- a/tests/TestApplication/src/Controller/Sort/PageCrudController.php +++ b/tests/TestApplication/src/Controller/Sort/PageCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Page; +/** + * @extends AbstractCrudController + */ class PageCrudController extends AbstractCrudController { public static function getEntityFqcn(): string diff --git a/tests/TestApplication/src/Controller/Sort/WebsiteCrudController.php b/tests/TestApplication/src/Controller/Sort/WebsiteCrudController.php index 80737bbfbe..f2fc18f56d 100644 --- a/tests/TestApplication/src/Controller/Sort/WebsiteCrudController.php +++ b/tests/TestApplication/src/Controller/Sort/WebsiteCrudController.php @@ -8,6 +8,9 @@ use EasyCorp\Bundle\EasyAdminBundle\Field\TextField; use EasyCorp\Bundle\EasyAdminBundle\Tests\TestApplication\Entity\Website; +/** + * @extends AbstractCrudController + */ class WebsiteCrudController extends AbstractCrudController { public static function getEntityFqcn(): string