ServiceCreationException: Service Invalid type ' '
- user321
- Člen | 5
Ahoj, zkousim touto cestou najit nekoho kdo by me mohl poradit. Delam upgrade app na nette 3.0 a kdyz jsem se dostal k poslednimu neonu, kde se konfiguruje balicek puvodnich autoru, tak dostavam tuto chybu:
Nette\DI\ServiceCreationException:Service 'attachmentsDatagridFilterFormFactory'
(type of App\Components\AttachmentsDatagrid\AttachmentsFilter\AttachmentsFilterForm\IAttachmentsFilterFormFactory): Invalid type ''.
Nejak nemuzu prijit jaky je duvod (v kodu je hodne interface kde jsou typy
pouze v php docu), ale u nich jsem tuto chybu nedostal. Predpokladam, ze se
jedna o problem s return type, protoze kdyz jsem narazil na problem s typem
parametru v create fnci, tak je u chyby uveden i nazev parametru. Zkousel
jsem overit zda neni nekde preklep v namespacu, ale tam sem chybu nenasel.
Zkousel jsem vlozit return type za definici parametru
...): AttachmentsFilterForm;
, ale porad stejna chyba :(
Aktualni verze balicku nette/...: 3.0.*
(napr
application@3.0.8, di@3.0.17, etc..)
// app/Components/AttachmentsDatagrid\AttachmentsFilter\AttachmentsFilterForm\IAttachmentsFilterFormFactory.php
interface IAttachmentsFilterFormFactory
{
/**
* @param IContainer $parent [OPTIONAL]
* @param string $name [OPTIONAL]
* @param array $columnsMapping [OPTIONAL]
*
* @return AttachmentsFilterForm
*/
public function create(IContainer $parent = null, $name = null, $columnsMapping = array());
}
// app/Components/AttachmentsDatagrid\AttachmentsFilter\AttachmentsFilterForm\AttachmentsFilterForm.php
class AttachmentsFilterForm
{
public function __construct(IContainer $parent = null, $name = null, $columnsMapping = array()) { ... }
}
attachmentsDatagridFilterFormFactory:
implement: App\Components\AttachmentsDatagrid\AttachmentsFilter\AttachmentsFilterForm\IAttachmentsFilterFormFactory
Budu velice rad za kazdy napad ;) Uprimne se snazim vyhnout prepisovani celeho moloch balicku, ktery hazi tuto chybu.
- user321
- Člen | 5
Diky za odpoved ;)) tak zatim jsem to vyresil pres upravu create fnce v interface (uplne netusim zda to je koser) i kdyz v constructoru to nebylo potreba :D
interface IAttachmentsFilterFormFactory {
public function create(IContainer $parent = null, string $name = null, array $columnsMapping = []);
}
class AttachmentsFilterForm {
public function __construct(IContainer $parent = null, $name = null, $columnsMapping = []) { ... }
}
trklo mě: IContainer $parent = null
JJ tento zapis je fuj a uz se tesim ze ho nikdo nebude pouzivat. V podstate
je to stejne jako napsat IContainer|null $parent = null
i kdyz
v php8.4 uz to bude deprecated
PHP 8.4: Implicitly nullable parameter declarations deprecated
- function test(string $test = null) {} + function test(?string $test = null) {}