Předání parametru továrničce

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
ondrakrajcik
Člen | 45
+
0
-

Mám třídu pro vytváření Formuláře

<?php

namespace App;

use Nette, Model;

classMyForm extends Nette\Application\UI\Form{

    public $MyRespository;
    public $parametr;

    public function __construct(\App\Model\Respositories\MyRespository $MyRespository, $parametr){
        parent::__construct();
        $this->MyRespository= $MyRespository;
        $this->buildForm();
	$this->parametr = parametr;
    }



    /** @return Form */
    private function buildForm() {
	...
        $this->addText("nick","nick");
	...
    }

    public function MyFormSubmitted(MyForm $form){
        ...
    }

}

interface IAddMyFormFactory{

    /** @return AddMyForm */
    public function create($parametr);// odtud se vola konstruktor ve kterem uz je jeden parametr a hlasi me to chybu

}

a presenter

protected function createComponentMyForm() {
	$parametr = 1;
    return $this->MyFormFactory->create($parametr);
}

Můžete mně poradit jak předat továrničce parametr? Nijak mně to nefunguje

Jiří Nápravník
Člen | 710
+
0
-

To nejdulezitejsi – neon – jsi vynechal. Mělo by to být nějak takto:

	-
		implement: App\IAddMyFormFactory
		class: App\AddMyForm
		parameters: [parametr]
		arguments: [%parametr%]

a poto mv konstruktoru AddMyForm, ten $parametr přesunout na začátek, a až ty DI věci za to

ondrakrajcik
Člen | 45
+
0
-

Jiří Nápravník napsal(a):

To nejdulezitejsi – neon – jsi vynechal. Mělo by to být nějak takto:

	-
		implement: App\IAddMyFormFactory
		class: App\AddMyForm
		parameters: [parametr]
		arguments: [%parametr%]

a poto mv konstruktoru AddMyForm, ten $parametr přesunout na začátek, a až ty DI věci za to

Teď nevím jak upravit ten config.neon

Mám to v services a nevím jak to uspořádat

services:
	- App\IAddMyFormFactory
	parameters: [parametr]
	router: @App\RouterFactory::createRouter
	authenticator: Authenticator

takto to vyhazuje opět chybu

Editoval ondrakrajcik (16. 3. 2014 13:04)

Šaman
Člen | 2635
+
0
-

Tu pomlčku dej o řádek výš a celý blok ohledně služby pak odsaď. Místo té pomlčky si můžeš představit nějaký název, jen to pojmenování není nutné, proto se zahrazuje pomlčkou.

ondrakrajcik
Člen | 45
+
0
-

Šaman napsal(a):

Tu pomlčku dej o řádek výš a celý blok ohledně služby pak odsaď. Místo té pomlčky si můžeš představit nějaký název, jen to pojmenování není nutné, proto se zahrazuje pomlčkou.

services:

-
    App\IAddMyFormFactory
    parameters: [parametr]
router: @App\RouterFactory::createRouter
authenticator: Authenticator

Takto to bohužel taky nefunguje

Editoval ondrakrajcik (16. 3. 2014 15:21)

Šaman
Člen | 2635
+
0
-

Vždyť ti to psal @Jiří Nápravník, co ti na tom nefunguje? Řádek class můžeš vynechat, když máš uvedenou @return anotaci u metody create(). A v konstruktoru dej $parametr jako první argument.

-
    implement: App\IAddMyFormFactory
    parameters: [parametr]
    arguments: [%parametr%]

Editoval Šaman (16. 3. 2014 15:57)

Jiří Nápravník
Člen | 710
+
0
-

Šaman napsal(a):
Řádek class můžeš vynechat, když máš uvedenou @return anotaci u metody create().

Není to v masteru jen? mám Nette 2.1 a dostanu pokdu class neuvedu a mam to jen v return anotaci: Service ‚124‘: Expected class, method or property, NULL given

Editoval Jiří Nápravník (17. 3. 2014 12:09)

Jan Mikeš
Člen | 771
+
0
-

@Jiří Nápravník: Jop, je to pouze v masteru

Ja osobne pouzivam tento zapis:

-
	create: App\Components\SomeComponent(%eventId%)
	implement: App\Factories\ISomeComponentFactory
	parameters: [eventId]

Editoval Lexi (17. 3. 2014 2:52)