الوصول إلى المستخدم المسجل حاليًا في UserRepository في Sylius

StackOverflow https://stackoverflow.com//questions/24012947

  •  21-12-2019
  •  | 
  •  

سؤال

أود أن أفعل شيئا من هذا القبيل.

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());
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top