Nelze najít třídu komponenty (Component with name ‚XYZ‘ does not exist.)

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

Zdravím.
Zkouším trochu proniknout do psaní komponent a i když jsem pročítal fórum i koukal na videonávod Honzy Tvrdíka, stále se mi nedaří správně zobrazit výstup komponenty… Její třídu (Expenses) mám uloženou v app/components

Expenses.php

use Nette\Application\UI\Control;

class Expenses extends Control
{
	public function __construct()
	{
	}

	public function render()
	{
		echo 'Hello world';
	}
}

Dále pro ni mám továrničku v HomepagePresenter.php:

namespace Flat;

use Nette;
use Model;

class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$control = $this->getComponent('Expenses');
	}

	protected function createComponentExpenses()
	{
		$control = new Expenses();

		return $control;
	}
}

A konečně, v šabloně se jí pokouším vykreslit pomocí {control Expenses}. Pokud se však pokusím stránku zobrazit, vyhodí mi to:

Nette\InvalidArgumentException
Component with name 'Expenses' does not exist.

K chybě dochází na řádku $control = $this->getComponent('Expenses');. Tuším, že jen někde něco zapomínám, ale nemohu přijít na to co. Děkuji všem za rady.

Editoval PajaS (5. 2. 2014 8:36)

Etch
Člen | 403
+
0
-

Celou metodu renderDefault smaž. Není potřeba.

namespace Flat;

use Nette;
use Model;

class HomepagePresenter extends BasePresenter
{
    protected function createComponentExpenses()
    {
        $control = new Expenses();

        return $control;
    }
}

a v šabloně musíš mít

{control expenses} /** Počáteční písmeno musí být malé. */

Editoval Etch (5. 2. 2014 8:41)

llook
Člen | 407
+
0
-

Myslím, že by to mělo být $this->getComponent('expenses') (malé „e“).

PajaS
Člen | 13
+
0
-

No jistě, taková maličkost a jak to otráví ráno :) Díky, už to valí!