'Problem connecting entitymanager(doctrine) on laminas framework

please tell me how to get entity manager on laminas framework

Controller:

    public function signupAction()
{
    $user = new Users();
    $user->setUsername('Test');
    $user->setEmail('[email protected]');
    $user->setNumber('+79168415532');
    
    // this one i have persist() and flush()
}


Solution 1:[1]

To elaborate on @Aleksey Blossom's answer you need to create a factory from which to inject the entity manager.

use Laminas\ServiceManager\Factory\FactoryInterface;
use Interop\Container\ContainerInterface;
use Doctrine\ORM\EntityManager;
use YourModule\Controller\CategoryController;

class CategoryControllerFactory implements FactoryInterface
{

    public function __invoke(ContainerInterface $container, $requestedName, ?array $options = null)
    {
        $entityManger = $container->get(EntityManager::class);

        return new CategoryController($entityManger);
    }

}

and in your controller

use Laminas\Mvc\Controller\AbstractActionController;
use Doctrine\ORM\EntityManager;

    class CategoryController extends AbstractActionController
    {
    
        private EntityManager $entityManager;
    
        public function __construct(EntityManager $entityManager)
        {
            $this->entityManager = $entityManager;
        }
    
        public function signupAction()
        {
            $user = new Users();
            $user->setUsername('Test');
            $user->setEmail('[email protected]');
            $user->setNumber('+79168415532');
    
            $this->entityManager->persist($user);
            $this->entityManager->flush();
        }
    
    }

As a side note I would also consider placing your business logic into models.

Solution 2:[2]

Create Factory

    class CategoryControllerFactory implements FactoryInterface
{
    public function __invoke(\Interop\Container\ContainerInterface $container, $requestedName, ?array $options = null)
    {
        $entityManger = $container->get(\Doctrine\ORM\EntityManager::class);


        return new CategoryController($entityManger);
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Aleksey Blossom