inject třídy z neonu do třídy v lib

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

Ahoj (Dobrý den),

jsem nette noob, apotřeboval bych poradit s tím to:
Proč mám v $this->sendDataSettings NULL.

Děkuji za radu.

class Base extends Nette\Object
{}

class SendData extends Base
{
    /** @var SendDataSettings @inject */
    public $sendDataSettings;
    /**
     *
     * @param SendDataSettings
     */
    public function injectSendDataSettings(SendDataSettings $settings)
    {
        $this->sendDataSettings = $settings;
    }
    public function main()
    {
        var_dump($this->sendDataSettings);//->getTargetUrl()
        die();
    }
}
class SendDataSettings
{
    private $targetUrl = '';
    public function getTargetUrl(){return $this->targetUrl;}
    public function setTargetUrl($targetUrl){$this->targetUrl = $targetUrl;}
}

a neon

services:
	SendDataSettings:
		class: SendDataSettings
		setup:
			- setTargetUrl(sdf)
		inject: yes
David Kudera
Člen | 455
+
0
-

Pokud chceš, aby se ti třídy navzájem automaticky vkládali (autowiring), tak musí být všechny registrované jako služby. Takže i ta třída SendData, kterou si necháš injektovat (vložit) pak třeba do presenteru apod.

Taky ve všech třídách kromě presenteru by se ideálně měli předávat závislosti přes konstruktor.

class SendData extends Base
{
    /** @var SendDataSettings */
    private $sendDataSettings;

    /**
     *
     * @param SendDataSettings
     */
    public function __construct(SendDataSettings $settings)
    {
        $this->sendDataSettings = $settings;
    }

    public function main()
    {
        var_dump($this->sendDataSettings);//->getTargetUrl()
        die();
    }
}

a upravený config

services:
    SendDataSettings:
        class: SendDataSettings
        setup:
            - setTargetUrl(sdf)

    SendData:
        class: SendData

a použití v presenteru:

class SomePresenter extends Presenter
{

	/** SendData @inject */
	public $sendData;

	public function actionDefault()
	{
		$this->sendData->doSomething();
	}

}
lpq
Člen | 10
+
0
-

Aha, děkuji v to případě vzniká problém
protože bych rád použitl sendData v cronu a potřebuju do něj dostat nastavení z configu.

// cron
$cron = new \SendData();
$cron->main();
David Kudera
Člen | 455
+
0
-

A to běží mimo nette? Jinak docela dost dobře je na takový věci použitelný tady kdyby/console a dokumentace.

Edit: ještě příspěvek tady z fóra

Editoval David Kudera (10. 7. 2014 15:44)