Ako injektnut property aby som nemusel pisat spagetti code?

4 years ago

steelbull
Member | 193
+
0
-

Ako inejktnut priamo property params, aby som v presenteri nemusel pisat $this->config->params ale len $this->config?

Dakujem.

class ConfigService extends \Nette\Object {

    private $params;

    private $context;

    public function __construct($params, \Nette\Database\Context $context) {

        $this->context = $context;

        $config = (new \App\Model\ConfigurationModel($this->context))->getConfiguration();

        $this->params = array_merge($params, $config);
    }

    public function __invoke() {
        return $this->params;
    }

}

4 years ago

steelbull
Member | 193
+
0
-

Vyriesil som to takto, ale neda sa to cez notation?

public function injectConfigService(\Services\ConfigService $service) {
    $this->configuration = $service();
}

4 years ago

romiix.org
Member | 349
+
+1
-

Nebolo by vhodnejšie nastaviť property priamo presenteru v config.neon?

4 years ago

steelbull
Member | 193
+
0
-

Urcite by to bolo krajsie aj vhodnejsie. Mohol by som Vas poprosit o nejaku ukazku, ako to property v config nastavim? Dakujem.

4 years ago

romiix.org
Member | 349
+
+1
-
services:
    nejakyPresenter:
        class: App\Presenters\NejakyPresenter
        setup:
            - $param(value)

4 years ago

David Kudera
Backer | 468
+
+1
-

Nebo bez nutnosti uvádět název

services:

    -
        class: App\Presenters\NejakyPresenter
        setup:
            - $param(value)

Další možností, často mnohem lepší, jak jsem zjistil, je nepoužívat config parametry v presenteru vůbec. Všechno mám pěkně rozdělené na služby, které mají přesně dané zodpovědnosti a také jim určené parametry. No a presentery jsou krásně čisté, jen s kódy pro vytvoření komponent přes továrničky a sem tam nějaké to načtení dat podle parametrů. A navíc se to i jednoduše testuje ;-)

4 years ago

Patrik Votoček
Member | 2249
+
+2
-

Prosím kluci příště česky do českého fóra