Acceso de usuario con sesión iniciada en UserRepository en Sylius
Pregunta
Me gustaría hacer algo como esto.
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]
Me gustaría acceder a service_container en createFilterPaginator
método.Puede alguien ayudarme a resolver este problema?
Solución
Primero de todo, no hay necesidad de que todo el servicio de contenedor, sólo security.context
.Supongo que ya ha extendido la UserRepository
así que usted puede sobrescribir el createFilterPaginator()
método y que está configurado correctamente como el sylius.repository.user
servicio.
Usted tiene que agregar un simple setter a su repositorio:
class UserRepository extends BaseUserRepository
{
protected $user;
public setUserViaSecurityContext(SecurityContextInterface $securityContext)
{
$this->user = $securityContext->getToken()->getUser();
}
}
Ahora usted tiene que manipular la definición de servicio en un compilador pasar
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'),
))
;
}
}
Y llamar a este Compilador pasar en tu haces de archivo:
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());
}
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow