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
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
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();
}
}
- David Kudera
- Člen | 455
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)