Tvorba komponenty – problém s ukážkovou komponenetu

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

Ahoj,

V prvom rade som začiatočník s Nette a dal som si za úlohu vytvoriť nákupný košík (cart).
Chcel by som aby ten nákupný košík fungoval ako komponenta.
V dokumentácii som našiel túto komponentu Github → fifteen

Používam aplikáciu z quickstart blogu.

Dostávam túto chybu

Class ‚App\Presenters\FifteenControl‘ not found.

Môj HomepagePresenter.php

<?php

namespace App\Presenters;

use Nette;


class HomepagePresenter extends BasePresenter
{
	/** @var Nette\Database\Context */
	private $database;


	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}


	public function renderDefault($page = 1)
	{
		$this->template->page = $page;
		$this->redrawControl('round');
		$this->template->posts = $this->database->table('posts')
			->order('created_at DESC')
			->page($page, 5);
	}

	/**
	 * Fifteen game control factory.
	 * @return FifteenControl
	 */
	protected function createComponentFifteen()
	{
		$fifteen = new FifteenControl();
		$fifteen->onGameOver[] = [$this, 'gameOver'];
		$fifteen->redrawControl();
		return $fifteen;
	}


	public function gameOver($sender, $round)
	{
		$this->template->flash = 'Congratulations!';
		$this->redrawControl('flash');
	}


}

Komponentu mám totožnú s githubom ktorý som linkoval vyššie.
Je možné že mám vyššiu verziu(2.3.4) na ktorú je ukážková komponenta v dokumentácii ?
Prípadne ako ju mám upraviť aby k nej mal presenter prístup?

David Matějka
Moderator | 6445
+
+1
-

Problem je v namespace, ktery ta komponenta nema. Takze bud ji pridej do use nebo pouzij FQN (\FifteenControl)

johnnie
Člen | 54
+
0
-

Ďakujem velmi pekne, použil som new \FifteenControl;
Do budúcna ešte ktorý use si mal konkrétne na mysli ?

Oli
Člen | 1215
+
0
-

Problém je v namespace. V ukázce presenter není v žádné namespace, proto to funguje. Tvůj presenter je v namespace App\Presenters, což je ale dobře. Řešením je říct mu, že FifteenControl nenajde v žádném jmenném prostoru. čili \FifteenControl

David Matějka
Moderator | 6445
+
0
-

@johnnie viz http://php.net/…mporting.php, tedy ze bys za use Nette; pridal use FifteenControl;