Nettrine repositář a PHPStan
- Petr Parolek
- Člen | 455
Ahoj, používám nettrine orm a stále uvažuju, jestli se tento zdlouhavý zápis v neonu nedá zjednodušit:
fooRepository:
class: App\Model\Repositories\FooRepository
tags:
doctrine.repositoryEntity: App\Model\Foo
barRepository:
class: App\Model\Repositories\BarRepository
tags:
doctrine.repositoryEntity: App\Model\Bar
Co takhle decorator nebo tagy? Jde to prosím nějak?
Když zaregistruju repozitář klasicky jako službu:
/**
* @var EntityManagerDecorator
*/
public $em;
/**
* @var App\Model\Repositories\FooRepository
*/
public $fooRepository;
public function __construct(
EntityManagerDecorator $em,
App\Model\Repositories\FooRepository $fooRepository
)
{
parent::__construct();
$this->em = $em;
$this->fooRepository = $fooRepository;
}
services:
- App\Model\Repositories\FooRepository
tak PHPStan řve:
Property App\Components\Forms\FooForm::$fooRepository (App\Model\Repositories\FooRepository) does not accept Doctrine\Persistence\ObjectRepository.
- Mysteria
- Člen | 797
Tak zkus ještě | místo &, koukal jsem že někde v kódu mám i to. Vyzkoušel jsem to a normálně jedno z toho mi vždy zabere:
/**
* @var XRepository
*/
private $xRepository;
Property X\XManager::$xRepository (X\XRepository) does not accept Doctrine\ORM\EntityRepository<X>.
/**
* @var XRepository|EntityRepository<X>
*/
private $xRepository;
Případně se podívej jestli máš i Doctrine extension pro PHPStan a jaký máš verze, já mám poslední aktuální.
- Petr Parolek
- Člen | 455
vyřešeno. Problém se týká pouze verze 0.11.19, která je za zenitem, veze 0.12.22 je ok. Díky @OndřejMirtes
Rada všem, nepoužívejte na Doctrine PHPStan 0.11 nebo registrujte repositáře jako DI služby a v konstruktoru nepředávejte takhle:
<?php
/**
* @var EntityManagerDecorator
*/
private $em;
/**
* @var UserRepository
*/
private $userRepository;
public function __construct(
EntityManagerDecorator $em
)
{
$this->em = $em;
$this->userRepository = $em->getRepository(User::class);
}
?>
Zápis v neonu se mi zdá jako oprus u každého repozitáře:
services:
userRepository:
class: App\Model\Repositories\UserRepository
create: @Doctrine\ORM\EntityManagerInterface::getRepository(App\Model\Entities\User)
Editoval ppar (4. 5. 2020 16:02)