액세에서 현재 로그인된 사용자에 UserRepository 에 Sylius
문제
내가 하고 싶은 이렇습니다.
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]
나는 것처럼 액세스 service_container 에 createFilterPaginator
방법입니다.할 수 있는 어떤 사람이 나에게 도움이 될 이 문제를 정?
해결책
첫째,필요한 전체 서비스 컨테이너,필요할만 security.context
.나는 가정을 이미 확장 UserRepository
할 수 있도록 덮어쓰기 createFilterPaginator()
방법이 올바르게 구성되어로 sylius.repository.user
서비스입니다.
이 있을 추가하는 간단하 setter 을 저장소:
class UserRepository extends BaseUserRepository
{
protected $user;
public setUserViaSecurityContext(SecurityContextInterface $securityContext)
{
$this->user = $securityContext->getToken()->getUser();
}
}
지금 당신은 당신을 조작하는 서비스의 정의에서는 컴파일러 전달
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'),
))
;
}
}
고 이것을 컴파일러를 통과에서 당신의 번들 file:
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());
}
}
제휴하지 않습니다 StackOverflow