SyliusのUserRepositoryで現在ユーザーにログインしているアクセス
質問
私はこのようなことをしたいのですが。
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]
.
createFilterPaginator
メソッドのservice_containerにアクセスしたいと思います。どなたでもこの問題を整理するのに役立ちますか?
解決
まず、サービスコンテナ全体を必要とせず、security.context
だけを必要とします。UserRepository
メソッドを上書きできるように、createFilterPaginator()
メソッドを上書きできるようにしてください。
あなたはあなたの報告書に単純なセッターを追加する必要があります:
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'),
))
;
}
}
.
とこのコンパイラを呼び出して、バンドルファイルに渡します。
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