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

před 5 lety

ondrakrajcik
Člen | 46
+
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

před 5 lety

Jiří Nápravník
Člen | 708
+
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

před 5 lety

ondrakrajcik
Člen | 46
+
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)

před 5 lety

Šaman
Člen | 2275
+
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.

před 5 lety

ondrakrajcik
Člen | 46
+
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)

před 5 lety

Šaman
Člen | 2275
+
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)

před 5 lety

Jiří Nápravník
Člen | 708
+
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)

před 5 lety

Jan Mikeš
Člen | 772
+
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)