PHP code example of dakataa / crud

1. Go to this page and download the library: Download dakataa/crud library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

dakataa / crud example snippets


   namespace App\Controller;

   use App\Entity\Product;
   use App\Form\ProductType;
   use Dakataa\Crud\Attribute\Action;
   use Dakataa\Crud\Attribute\Entity;
   use Dakataa\Crud\Attribute\EntityType;
   use Dakataa\Crud\Controller\AbstractCrudController;
   use Doctrine\ORM\QueryBuilder;
   use Symfony\Component\HttpFoundation\Request;
   use Symfony\Component\Routing\Attribute\Route;
   
   #[Route('/product')]
   #[Entity(Product::class)]
   #[EntityType(ProductType::class)]
   class ProductController extends AbstractCrudController
   {
   }
   

   use Dakataa\Crud\Attribute\Resolver\QueryResolver;
   use Dakataa\Crud\Controller\CrudServiceContainer;

   #[Route('/product')]
   #[Entity(Product::class)]
   #[EntityType(ProductType::class)]
   #[QueryResolver('buildCustomQuery')]
   class ProductController extends AbstractCrudController
   {
       protected function buildCustomQuery(Request $request, Action $action, QueryBuilder $query, CrudServiceContainer $serviceContainer): void
       {
           $query->andWhere('a.enabled = true');
       }
   }
   

use App\Entity\Building;
use App\Entity\PropertyOwner;
use Dakataa\Crud\Attribute\Entity;
use Dakataa\Crud\Attribute\Resolver\AccessGrantedResolver;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Dakataa\Crud\Security\SecuritySubject;
use Symfony\Component\HttpFoundation\Request;

#[AccessGrantedResolver('resolveAccess')]
class OwnerController
{
    private function resolveAccess(
        Request $request,
        string $permission,
        SecuritySubject $subject,
        bool $granted,
        CrudServiceContainer $serviceContainer,
    ): bool {
        if (!$subject->object instanceof PropertyOwner) {
            return $granted;
        }

        return $serviceContainer->authorizationChecker->isGranted(
            $permission,
            new SecuritySubject(
                new Entity(Building::class),
                $subject->object->getProperty()->getBuilding(),
            ),
        );
    }
}

use Dakataa\Crud\Attribute\Action;
use Dakataa\Crud\Attribute\Resolver\ActionAccessGrantedResolver;

#[ActionAccessGrantedResolver(
    'resolveActionAccess',
    actions: ['list', 'view', 'edit'],
)]
class OwnerController
{
    private function resolveActionAccess(
        Request $request,
        Action $action,
        ?object $object,
        bool $granted,
        CrudServiceContainer $serviceContainer,
    ): bool {
        return $granted && $this->isAllowedForCurrentBuilding($request, $action, $object);
    }
}

use App\Entity\Product;
use Dakataa\Crud\Attribute\Resolver\EntityResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\HttpFoundation\Request;

#[EntityResolver('findProduct', actions: ['view', 'edit'])]
class ProductController extends AbstractCrudController
{
    protected function findProduct(
        Request $request,
        CrudServiceContainer $serviceContainer
    ): ?Product {
        return $serviceContainer->entityManager
            ->getRepository(Product::class)
            ->findOneBy([
                'slug' => $request->attributes->get('id'),
            ]);
    }
}

use Dakataa\Crud\Attribute\Action;
use Dakataa\Crud\Attribute\Resolver\ResponseContextResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\HttpFoundation\Request;

#[ResponseContextResolver(
    resolver: 'resolveProductContext',
    actions: ['add', 'edit'],
)]
class ProductController extends AbstractCrudController
{
    protected function resolveProductContext(
        Request $request,
        Action $action,
        array $context,
        CrudServiceContainer $serviceContainer
    ): array {
        $product = $context['object'] ?? null;

        return [
            'helpText' => 'Changes are applied immediately.',
            'isEdit' => $action->getName() === 'edit',
            'productId' => $product?->getId(),
        ];
    }
}

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

#[Route('/featured')]
#[Action]
#[ResponseContextResolver('resolveFeaturedContext')]
public function featured(Request $request): Response
{
    return parent::list($request);
}

#[ResponseContextResolver('resolveSharedContext')]
#[ResponseContextResolver('resolveListContext', actions: ['list'])]
class ProductController extends AbstractCrudController
{
}

use App\Entity\Product;
use Dakataa\Crud\Attribute\Action;
use Dakataa\Crud\Attribute\Resolver\FormTypeOptionsResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\HttpFoundation\Request;

#[FormTypeOptionsResolver(
    resolver: 'resolveFormTypeOptions',
    actions: ['add', 'edit'],
)]
class ProductController extends AbstractCrudController
{
    protected function resolveFormTypeOptions(
        Request $request,
        Action $action,
        ?Product $product,
        array $options,
        CrudServiceContainer $serviceContainer
    ): array {
        $options['validation_groups'] = $product?->getId() === null
            ? ['Default', 'create']
            : ['Default', 'update'];

        return $options;
    }
}

use Dakataa\Crud\Attribute\Action;
use Dakataa\Crud\Attribute\Resolver\FormSubmitResolver;
use Dakataa\Crud\Attribute\Resolver\FormSuccessResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;

#[FormSubmitResolver('prepareFormData', actions: ['add', 'edit'])]
#[FormSuccessResolver('handleSuccessfulSubmit', actions: ['add'])]
class ProductController extends AbstractCrudController
{
    protected function prepareFormData(
        Request $request,
        Action $action,
        FormInterface $form,
        CrudServiceContainer $serviceContainer
    ): void {
        // The form is valid, but an entity has not been flushed yet.
    }

    protected function handleSuccessfulSubmit(
        Request $request,
        Action $action,
        FormInterface $form,
        CrudServiceContainer $serviceContainer
    ): void {
        $data = $form->getData();

        // This also works for forms backed by an array or DTO instead of an entity.
    }
}

use App\Form\ContactType;
use Dakataa\Crud\Attribute\Action;
use Dakataa\Crud\Attribute\EntityType;
use Dakataa\Crud\Attribute\Resolver\FormSuccessResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Attribute\Route;

#[Route('/contact')]
#[EntityType(ContactType::class, successMessage: 'Message sent successfully')]
#[FormSuccessResolver('sendMessage', actions: ['add'])]
class ContactController extends AbstractCrudController
{
    protected function sendMessage(
        Request $request,
        Action $action,
        FormInterface $form,
        CrudServiceContainer $serviceContainer
    ): void {
        $data = $form->getData();
        // Send the message or dispatch an application command.
    }
}

use Dakataa\Crud\Attribute\Column;
use Dakataa\Crud\Attribute\Fields;

#[
    Column('position'),
    Column('contact.name', searchable: true, visible: false),
    Fields([
        'contact.uic',
        'invitationSentAt' => ['dateFormat' => 'Y-m-d H:i:s'],
        'invitationRespondedAt' => ['dateFormat' => 'Y-m-d H:i:s'],
    ]),
    Fields(
        fields: ['contact.vat', 'contact.privateNote'],
        roles: ['ROLE_ADMIN', 'ROLE_ACCOUNTANT'],
        permission: 'CONTACT_VIEW_PRIVATE_DATA',
        useFlatKey: true,
    ),
]
class ContactController extends AbstractCrudController
{
}

use Dakataa\Crud\Attribute\Resolver\ColumnValueResolver;
use Dakataa\Crud\Controller\CrudServiceContainer;

#[Route('/product')]
#[Entity(Product::class)]
#[EntityType(ProductType::class)]
#[ColumnValueResolver('resolveColumnValue')]
class ProductController extends AbstractCrudController
{
    protected function resolveColumnValue(Request $request, Product $product, Column $column, CrudServiceContainer $serviceContainer): mixed
    {
        return match ($column->getField()) {
            'stockStatus' => $product->getStock() > 0 ? 'In Stock' : 'Out of Stock',
            default => $product->{'get' . ucfirst($column->getField())}(),
        };
    }
}

#[ColumnValueResolver('resolveStockStatus', fields: ['stockStatus'])]

use Dakataa\Crud\Attribute\Column;
use Dakataa\Crud\Attribute\Resolver\ColumnVisibilityResolver;
use Dakataa\Crud\Controller\AbstractCrudController;
use Dakataa\Crud\Controller\CrudServiceContainer;
use Symfony\Component\HttpFoundation\Request;

#[ColumnVisibilityResolver('isPartnerColumnVisible', fields: ['partner'])]
class BuildingController extends AbstractCrudController
{
    protected function isPartnerColumnVisible(
        Request $request,
        Column $column,
        CrudServiceContainer $serviceContainer
    ): bool {
        return !$request->attributes->has('partnerId');
    }
}
shell
	php bin/console make:entity Product
	php bin/console make:form ProductType Product
 	...
	php bin/console make:migration
	php bin/console doctrine:migrations:migrate
    
shell
    php symfony crud:make:entity Product ProductType ProductController