DI a načtení dat z modelu

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

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

besanek
Člen | 128
+
+4
-

Použij:

namespace App\KontaktyModule\Model;

use Nette;

class Kontakty extends Nette\Object
{

a přečti si nějakou literaturu o namespacech

Vojtěch Dobeš
Gold Partner | 1316
+
+1
-

Chybí ti use statement. Přidej následující kód před deklaraci třídy:

use Nette;
Mirek
Člen | 86
+
0
-

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
+
0
-

Mrkni na odpověď od besanek. Jeho poznámka o doučení se namespaců bude pro tebe případná :).

Mirek
Člen | 86
+
0
-

Tak děkuji, už jsem se s tím popral tak, že:
/** @var KontaktyModule\Model\Kontakty */ jsem opravil na
/** @var \App\KontaktyModule\Model\Kontakty */ (stejně tak v konstruktoru)
a už to funguje.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

To je jedno možné řešení. Druhým je použít opět odpovídající use statement.