瀏覽代碼

Refactoring Container

feature/symfony6.1
Fab 2 年之前
父節點
當前提交
af34d2fe60
共有 4 個文件被更改,包括 169 次插入46 次删除
  1. +47
    -38
      Controller/ControllerTrait.php
  2. +44
    -8
      Controller/User/UserAdminController.php
  3. +15
    -0
      Repository/AbstractRepositoryQuery.php
  4. +63
    -0
      Resources/views/adminlte/crud/delete.html.twig

+ 47
- 38
Controller/ControllerTrait.php 查看文件

//TODO si vous avez une erreur avec le :array c'est qu'il faut passer à symfony 5.4. //TODO si vous avez une erreur avec le :array c'est qu'il faut passer à symfony 5.4.
//Suivez la procédure suivante : https://symfony.com/doc/current/setup/unstable_versions.html#upgrading-your-project-to-an-unstable-symfony-version //Suivez la procédure suivante : https://symfony.com/doc/current/setup/unstable_versions.html#upgrading-your-project-to-an-unstable-symfony-version
//En gros il faut changer tout les dépendances symfony/ qui sont en 5.3 par 5.4 dans composer.json //En gros il faut changer tout les dépendances symfony/ qui sont en 5.3 par 5.4 dans composer.json
public static function getSubscribedServices() :array
public static function getSubscribedServices(): array
{ {
return array_merge( return array_merge(
parent::getSubscribedServices(),
ApplicationDefinition::getSubscribedContainerServices(),
[
Environment::class => Environment::class,
Security::class => Security::class,
EntityManagerInterface::class => EntityManagerInterface::class,
UrlGeneratorInterface::class => UrlGeneratorInterface::class,
SessionInterface::class => SessionInterface::class,
PaginatorInterface::class => PaginatorInterface::class,
RequestStack::class => RequestStack::class,
EventDispatcherInterface::class => EventDispatcherInterface::class,
LoggerInterface::class => LoggerInterface::class,
ParameterBagInterface::class => ParameterBagInterface::class,
TranslatorInterface::class => TranslatorInterface::class,
PdfGenerator::class => PdfGenerator::class,
TranslatorAdmin::class => TranslatorAdmin::class,
FilterManager::class => FilterManager::class,
FlashBagTranslator::class => FlashBagTranslator::class,
MailjetTransport::class => MailjetTransport::class,
AdminUrlGenerator::class => AdminUrlGenerator::class,
SettingSolver::class => SettingSolver::class,
ComponentContainer::class => ComponentContainer::class,
EntityRepository::class => EntityRepository::class,
FileComponent::class => FileComponent::class,
]
parent::getSubscribedServices(),
ApplicationDefinition::getSubscribedContainerServices(),
[
ApplicationDefinition::class => ApplicationDefinition::class,
Environment::class => Environment::class,
Security::class => Security::class,
EntityManagerInterface::class => EntityManagerInterface::class,
UrlGeneratorInterface::class => UrlGeneratorInterface::class,
SessionInterface::class => SessionInterface::class,
PaginatorInterface::class => PaginatorInterface::class,
RequestStack::class => RequestStack::class,
EventDispatcherInterface::class => EventDispatcherInterface::class,
LoggerInterface::class => LoggerInterface::class,
ParameterBagInterface::class => ParameterBagInterface::class,
TranslatorInterface::class => TranslatorInterface::class,
PdfGenerator::class => PdfGenerator::class,
TranslatorAdmin::class => TranslatorAdmin::class,
FilterManager::class => FilterManager::class,
FlashBagTranslator::class => FlashBagTranslator::class,
MailjetTransport::class => MailjetTransport::class,
AdminUrlGenerator::class => AdminUrlGenerator::class,
SettingSolver::class => SettingSolver::class,
ComponentContainer::class => ComponentContainer::class,
EntityRepository::class => EntityRepository::class,
FileComponent::class => FileComponent::class,
]
); );
} }


public function addFlashTranslator( public function addFlashTranslator(
string $type,
$translationKeyName,
$translationEntityName = null,
$translationParam = array()
): void
{
string $type,
$translationKeyName,
$translationEntityName = null,
$translationParam = array()
): void {
if ($translationEntityName === null && method_exists($this, 'getTranslationEntityName')) { if ($translationEntityName === null && method_exists($this, 'getTranslationEntityName')) {
$translationEntityName = $this->getTranslationEntityName(); $translationEntityName = $this->getTranslationEntityName();
} }




$this->get(FlashBagTranslator::class)->add( $this->get(FlashBagTranslator::class)->add(
$type,
$translationKeyName,
$translationEntityName,
$translationParam
$type,
$translationKeyName,
$translationEntityName,
$translationParam
); );
} }


return in_array($interfaceName, class_implements($this->getEntityFqcn())); return in_array($interfaceName, class_implements($this->getEntityFqcn()));
} }


public function generateEaUrl(string $controller = null, string $action = null, int $entityId = null, array $extraParam = array()): string
{
public function generateEaUrl(
string $controller = null,
string $action = null,
int $entityId = null,
array $extraParam = array()
): string {
$adminUrlGenerator = $this->get(AdminUrlGenerator::class); $adminUrlGenerator = $this->get(AdminUrlGenerator::class);
if ($controller) { if ($controller) {
$adminUrlGenerator->setController($controller); $adminUrlGenerator->setController($controller);
return $this->get(Environment::class); return $this->get(Environment::class);
} }


public function getApplicationDefinition(): ApplicationDefinition
{
return $this->get(ApplicationDefinition::class);
}

public function getEntityManager(): EntityManagerInterface public function getEntityManager(): EntityManagerInterface
{ {
return $this->get(EntityManagerInterface::class); return $this->get(EntityManagerInterface::class);

+ 44
- 8
Controller/User/UserAdminController.php 查看文件

use EasyCorp\Bundle\EasyAdminBundle\Config\Action; use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
use EasyCorp\Bundle\EasyAdminBundle\Config\Actions; use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
use EasyCorp\Bundle\EasyAdminBundle\Config\Crud; use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore;
use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext; use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
use EasyCorp\Bundle\EasyAdminBundle\Event\AfterCrudActionEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeCrudActionEvent;
use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityDeletedEvent; use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityDeletedEvent;
use EasyCorp\Bundle\EasyAdminBundle\Exception\ForbiddenActionException; use EasyCorp\Bundle\EasyAdminBundle\Exception\ForbiddenActionException;
use Lc\SovBundle\Definition\RolesDefinition; use Lc\SovBundle\Definition\RolesDefinition;
use Lc\SovBundle\Definition\RolesDefinitionInterface; use Lc\SovBundle\Definition\RolesDefinitionInterface;
use Lc\SovBundle\Doctrine\EntityManager; use Lc\SovBundle\Doctrine\EntityManager;
use Lc\SovBundle\Doctrine\Extension\BlameableInterface;
use Lc\SovBundle\Factory\User\UserFactory; use Lc\SovBundle\Factory\User\UserFactory;
use Lc\SovBundle\Translation\TranslatorAdmin; use Lc\SovBundle\Translation\TranslatorAdmin;
use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\RequestStack;
return $event->getResponse(); return $event->getResponse();
} }


$entityInstance = $event->getEntityInstance();

ApplicationDefinition::getSubscribedContainerServices();
$user = $event->getEntityInstance();




$metas = $this->getEntityManager()->getMetadataFactory()->getAllMetadata(); $metas = $this->getEntityManager()->getMetadataFactory()->getAllMetadata();
foreach ($metas as $meta) { foreach ($metas as $meta) {
$entities[] = $meta->getName();
$entityFqcnList[] = $meta->getName();
}


// Creéer formulaire avec un champ confirm

//si clqiue suppression
$entitiesToDelete = array();
foreach ($entityFqcnList as $entityFqcn){
if(!is_null($this->getApplicationDefinition()->getContainerByEntityFqcn($entityFqcn))) {
$repositoryQuery = $this->get(
$this->getApplicationDefinition()->getContainerByEntityFqcn($entityFqcn)
)->getRepositoryQuery();

if (new $entityFqcn instanceof BlameableInterface) {
//CreatedBy
$query = $repositoryQuery->create();
$query->filterByCreatedBy($user);
$entitiesToDelete[$entityFqcn]['nullify']['createdBy'] = $query->find();

//UpdatedBy
$query = $repositoryQuery->create();
$query->filterByUpdatedBy($user);
$entitiesToDelete[$entityFqcn]['nullify']['updatedBy'] = $query->find();
}
}
dump($entityFqcn);
} }


foreach ($entities as $entity){
dump($entity);
dump($context->getCrudControllers());


$responseParameters = $this->configureResponseParameters(KeyValueStore::new([
'pageName' => Crud::PAGE_DETAIL,
'templatePath' => '@LcSov/adminlte/crud/delete.html.twig',
'global_actions' => array(),
'batch_actions' => array(),
'entities_delete' => $entitiesToDelete,
]));

$event = new AfterCrudActionEvent($context, $responseParameters);
$this->get('event_dispatcher')->dispatch($event);
if ($event->isPropagationStopped()) {
return $event->getResponse();
} }
die();


return $responseParameters;




} }

+ 15
- 0
Repository/AbstractRepositoryQuery.php 查看文件

use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Knp\Component\Pager\PaginatorInterface; use Knp\Component\Pager\PaginatorInterface;
use Lc\SovBundle\Doctrine\EntityInterface; use Lc\SovBundle\Doctrine\EntityInterface;
use Lc\SovBundle\Model\User\UserInterface;


abstract class AbstractRepositoryQuery implements RepositoryQueryInterface abstract class AbstractRepositoryQuery implements RepositoryQueryInterface
{ {
->setParameter('id', $id); ->setParameter('id', $id);
} }


public function filterByCreatedBy(UserInterface $user):self
{
return $this
->andWhere('.createdBy = :user')
->setParameter('user', $user);
}

public function filterByUpdatedBy(UserInterface $user):self
{
return $this
->andWhere('.updatedBy = :user')
->setParameter('user', $user);
}

public function andWhereEqual($field, $value) public function andWhereEqual($field, $value)
{ {
return $this->andWhere('.'.$field.' = :'.$field)->setParameter($field, $value); return $this->andWhere('.'.$field.' = :'.$field)->setParameter($field, $value);

+ 63
- 0
Resources/views/adminlte/crud/delete.html.twig 查看文件

{# @var ea \EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext #}
{# @var entities \EasyCorp\Bundle\EasyAdminBundle\Collection\EntityDtoCollection #}
{# @var paginator \EasyCorp\Bundle\EasyAdminBundle\Orm\EntityPaginator #}
{% extends ea.templatePath('layout') %}

{% trans_default_domain ea.i18n.translationDomain %}

{% block content_title %}
{{ 'delete'|sov_trans_admin_title(translation_entity_name, {id: ea.getEntity().getInstance().getId()}) }}
{% endblock %}

{% block content_breadcrumb %}
{{ include('@LcSov/adminlte/block/breadcrumb.html.twig') }}
{% endblock content_breadcrumb %}


{% block page_actions %}
{% endblock page_actions %}

{% block main %}
{% block main_prepend %}{% endblock %}
<div class="col-12" id="{% block detail_id %}{% endblock detail_id %}">
{% block card_wrapper %}
<div class="card card-outline card-primary">
{% block card_header_wrapper %}
<div class="card-header">
<div class="btn-list float-sm-right">
</div>
</div>
{% endblock %}
{% block card_body_wrapper %}
<div class="card-body">
{% block detail_fields %}
{% for entity_fqcn, entity_actions in entities_delete %}
<div class="callout callout-danger">
<h5>{{ entity_fqcn }}</h5>
{% for action, entity_field_list in entity_actions %}
{% for field, entity_list in entity_field_list %}
<p>{{ entity_list|length }} entités à {{ action }} sur le champ {{ field }}</p>
{% endfor %}
{% endfor %}
</div>
{% endfor %}
{% endblock %}
</div>
{% endblock %}
{% block card_footer_wrapper %}
<div class="card-footer">
<div class="row">
{# {% block delete_form %} #}
{# {{ include('@EasyAdmin/crud/includes/_delete_form.html.twig', { entity_id: entity.primaryKeyValue }, with_context = false) }} #}
{# {% endblock delete_form %} #}
</div>
</div>
{% endblock %}


</div>
{% endblock card_wrapper %}
</div>
{% block main_append %}{% endblock %}

{% endblock main %}

Loading…
取消
儲存