Accesso attualmente connesso all'utente in UserRepository in Sylius
Domanda
Mi piacerebbe fare qualcosa del genere.
sylius_backend_user_index:
pattern: /
methods: [GET]
defaults:
_controller: sylius.controller.user:indexAction
_sylius:
template: SyliusWebBundle:Backend/User:index.html.twig
method: createFilterPaginator
arguments: [$criteria, $sorting, $deleted, @service_container]
.
Vorrei accedere a Service_Container nel metodo createFilterPaginator
.Qualcuno può aiutarmi a risolvere questo problema?
Soluzione
Prima di tutto, non c'è bisogno di un intero contenitore di servizio, è necessario solo security.context
.Suppongo che tu abbia già esteso il UserRepository
in modo da poter sovrascrivere il metodo createFilterPaginator()
ed è correttamente configurato come servizio sylius.repository.user
.
Devi aggiungere un semplice setter al tuo risponditore:
class UserRepository extends BaseUserRepository
{
protected $user;
public setUserViaSecurityContext(SecurityContextInterface $securityContext)
{
$this->user = $securityContext->getToken()->getUser();
}
}
.
Ora devi manipolare la definizione del servizio in un passaggio del compilatore
namespace Acme\Bundle\YourBundle\DependencyInjection\Compiler;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;
class ModifyRepositoryPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$container
->findDefinition('sylius.repository.user')
->addMethodCall('setUserViaSecurityContext', array(
new Reference('security.context'),
))
;
}
}
.
e chiama questo compilatore Passa nel tuo file Bundles:
namespace Acme\Bundle\YourBundle;
use Acme\Bundle\YourBundle\DependencyInjection\Compiler\ModifyRepositoryPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeYourBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
$container->addCompilerPass(new ModifyRepositoryPass());
}
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow