Nefunguje inject uvnitř injectnuté třídy
- Budry
- Člen | 88
Zdravím,
používám poslední verzi verzi: Nette Framework 2.1-dev a tento
commit c18230f
zrušil možnost použití inject metod uvnitř injektnuté třídy
V Presenteru inject() funguje jak má, ale když použiji inject v továrně na vytváření formulářů dostanu chybu
Argument 1 passed to Kappa\App\Forms\Comments\CommentsForm::injectCommentsFormSubmitted() must be an instance of Kappa\App\Forms\Comments\CommentsFormSubmitted, none given, called in D:\projekt\temp\cache\_Nette.Configurator\_-2e8e5b952a96855b6fa542a5ce5ce701.php on line 920 and defined
Konfigurace továrničky:
factories:
CommentsForm:
create: Kappa\App\Forms\Comments\CommentsForm(%url%)
implement: Kappa\App\Forms\Comments\ICommentsFormFactory
parameters: [url]
Třída CommentsForm:
class CommentsForm extends Kappa\Application\UI\Form
{
/**
* @var CommentsFormSubmitted
*/
private $commentsFormSubmitted;
/**
* @param CommentsFormSubmitted $commentsFormSubmitted
*/
public function injectCommentsFormSubmitted(CommentsFormSubmitted $commentsFormSubmitted)
{
$this->commentsFormSubmitted = $commentsFormSubmitted;
}
//...
}
Cache:
final class Kappa_App_Forms_Comments_ICommentsFormFactoryImpl_CommentsForm implements Kappa\App\Forms\Comments\ICommentsFormFactory
{
private $container;
public function __construct(Nette\DI\Container $container)
{
$this->container = $container;
}
public function create($url)
{
$service = new Kappa\App\Forms\Comments\CommentsForm($url);
$service->injectCommentsFormSubmitted();
return $service;
}
}
Editoval Budry (28. 2. 2013 17:02)
- sifik
- Člen | 27
Mám bohužel stejný problém.
Lámu si hlavu nad tím, zda to je úmyslně nebo bug?
Možná za tím byla snaha omezit používání inject metod
v továrničkách.
V tom případě jsem ale proti, protože rád vytvářím např. v control
form, který chci taktéž injectnout. Použít v tomto případě konstruktor
mi připadá minimálně divné.
Ono celkově jakékoliv závislosti předávat konstruktorem přes továrničky není zrovna dvakrát pohodlné, díky obšírné konfiguraci v neonu. např.:
factories:
postControl:
create: \Flame\Blog\PostBundle\Components\Posts\PostControl(%post%)
implement: \Flame\Blog\PostBundle\Components\Posts\IPostControlFactory
parameters: [\Flame\Blog\PostBundle\Entity\Posts\Post post = null]