Správné použití Dependency Injection
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- ikysek
- Člen | 22
Zdravím, snažím se pochopit a nějakým rozumným způsobem začít využívát DI. Pročetl jsem pár stran v dokumentaci, např. https://doc.nette.org/…dependencies a potom jsem to chtěl ozkoušet, mám:
HomepagePresenter
namespace App\FrontModule\Presenters;
class HomepagePresenter extends BasePresenter {
private $HomepageTest;
public function __construct(HomepageTest $test) {
$this->HomepageTest = $test;
$this->HomepageTest->HelloFromModel();
}
}
HomepageTest
namespace App\Model;
class HomepageTest extends \Nette\Object {
public function HelloFromModel()
{
echo "Ahoj z modelu!!!";
}
}
config.neon
services:
HomepageTest: App\Model\HomepageTest
- App\Model\UserManager
Bohužel mi tracy hlasí:
Nette\DI\ServiceCreationException
Class App\FrontModule\Presenters\HomepageTest needed by App\FrontModule\Presenters\HomepagePresenter::__construct() not found. Check type hint and 'use' statements.
Co mi uteklo? Díky za odpověd
- Oli
- Člen | 1215
Však ti na to @DavidMatějka odpověděl ;-)
Ty říkáš, že presenter má hledat HomepageTest
ve jmeným
prostoru App\FrontModule\Presenters\HomepageTest
. Tam ho ale nikdy
nenajde, protože on ve skutečnosti je v App\Model\HomepageTest
Správně to je např takhle:
public function __construct(\App\Model\HomepageTest $test) {
$this->HomepageTest = $test;
$this->HomepageTest->HelloFromModel();
}