chybějící type hint u třídy
- Mirek
- Člen | 86
Mám třídu, která v konstruktoru mám jeden parametr (string), který se jí předává při vytváření třídy a druhý parametr, který se předává přes DI. A hlásí mi to, že u toho prvního parametru chybí type hint, že je povinný. Jak a kam mám zapsat ten type hint, že se jedná o řetězec. Moje pokusy skončili tím, že mi to řeklo, že chybí service „string“, když jsem se snažil ten typ tam někam propašovat.
- hranicka
- Člen | 23
Jestli máš ten constructor nějak takto:
public function __construct($string, \SomeObject $object)
{
// ...
}
tak DI container neví co má dodat jako první parametr.
Musíš ho nadefinovat v configu při definování služby (config.neon) něco jako:
- My\Extra\Class('hodnota předaná do prvního parametry') # a další parametry už doplní DI container
- Pavel Macháň
- Člen | 282
Pokud to registruješ do služeb tak musíš ten string parametr předat ručně (nette neví bez type hintu co tam vložit).
services:
- MojeSluzba('mujString')
Když budeš mít první službu a až pak bez type hintu. Těma 3 tečkama řekneš ať to doplní autowire dle type hintu
services:
- MojeSluzba(..., 'mujString')
Jestliže to nemáš ve službách tak tam musíš ručně předat VŠE
$struktura = new GrpSeznam('STRUKTURA', $this->nejakaInjectnutaSluzba);
Editoval EIFEL (2. 7. 2014 12:11)
- Jan Endel
- Člen | 1016
Řešení? Továrnička!
class GrpSeznam
{
private $name;
/**
* MyApp\Dependency
*/
private $dependency;
public function __construct($name, MyApp\Depedency $dependency)
{
$this->name = $name;
$this->dependency = $dependency
}
}
interface IGrpSeznamFactory
{
/**
* @param string $name
* @return GrpSeznam
*/
public function create($name)
}
v config neonu:
- {implement: IGrpSeznamFactory, parameters: [name]}
použití:
class MyPresenter extends Nette\Application\UI\Presenter
{
/*
* @var IGprSeznamFactory
* @inject
*/
public $gprSeznamFactory;
public function renderDefault()
{
$struktura = $this->gprSeznamFactory->create('STRUKTURA');
$groups = $this->gprSeznamFactory->create('Groups');
}
}
a nemusíš se zatěžovat řešením závislostí :-)