DI a načtení dat z modelu
- Mirek
- Člen | 86
S Nette teprve začínám a mám problém s načtením dat z modelu. Je to asi zcela triviální, ale z příkladu, který je součástí distribuce Nette jsem to nějak nepochopil.
Takže mám presenter v app/KontaktyModule/presenters kde mám
namespace KontaktyModule;
use App\KontaktyModule\Model;
/**
* Homepage presenter.
*/
class HomepagePresenter extends \BasePresenter
{
/** @var KontaktyModule\Model\Kontakty */
private $seznam;
public function __construct(KontaktyModule\Model\Kontakty $seznam)
{
$this->seznam = $seznam;
}
public function renderDefault()
{
$this->template->seznam = $this->seznam->vsichni();
}
}
a pak mám model v app/KontaktyModule/model s názvem Kontakty.php a obsahuje:
namespace App\KontaktyModule\Model;
class Kontakty extends Nette\Object
{ // řádek 6 - kde je chyba
public function __construct()
{
}
public function vsichni()
{
return array(array('jmeno' => 'Vomáčka Petr'),
array('jmeno' => 'Klusová Martina'),
array('jmeno' => 'Novotný Martin'),
array('jmeno' => 'Novák Jiří'),
array('jmeno' => 'Sýkora Karel')
);
}
}
a do config.neon jsem přidal řádek do services:
- App\KontaktyModule\Model\Kontakty
Výsledkem je chyba:
Fatal Error – Class ‚App\KontaktyModule\Model\Nette\Object‘ not found
v \app\KontaktyModule\model\Kontakty.php:6
- Vojtěch Dobeš
- Gold Partner | 1316
Chybí ti use
statement. Přidej následující kód před
deklaraci třídy:
use Nette;
- Mirek
- Člen | 86
Tak to pomohlo jen trochu, teď mám chybu:
Nette\DI\ServiceCreationException – No service of type
KontaktyModule\KontaktyModule\Model\Kontakty found. Make sure the type hint in
KontaktyModule\HomepagePresenter::__construct() is written correctly and service
of this type is registered.
v index.php na řádku 10:
9: // Run application.
10: $container->application->run();
- Vojtěch Dobeš
- Gold Partner | 1316
Mrkni na odpověď od besanek. Jeho poznámka o doučení se namespaců bude pro tebe případná :).
- Vojtěch Dobeš
- Gold Partner | 1316
To je jedno možné řešení. Druhým je použít opět odpovídající
use
statement.