الوصول إلى المستخدم المسجل حاليًا في 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
خدمة.
يجب عليك إضافة أداة ضبط بسيطة إلى مستودعك:
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