Problém s chybějící třídou

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

Zdravím všechny a prosím o radu kde je chyba při hlášce Class TydenModel not found prestože třída TydenModel existuje. Snažil jsem se to najít zde na fóru, ale nějak se nezadařilo. Pro jistotu napíši části zdrojáků.
config.neon

<?php
services:
		robotLoader:
			run: true

		database:
			class: Nette\Database\Connection
			arguments: ['mysql:host=localhost;dbname=pokus', 'root', '']

		model:
			class: Model
			arguments: [@database]

		authenticator:
			factory: [@model, createAuthenticatorService]
?>

TydenPresenter

<?php
class TydenPresenter extends BasePresenter
{
	public function renderDefault(){
	   $this->template->tyden = TydenModel::fetchAll();
	}

	public function renderTyden($id){
	   if(!($tyden = TydenModel::fetchAll($id))){
		.....
		}
		$this -> template -> tyden = $tyden;
	}
}
?>

TydenModel

<?php
namespace Model;
use Nette\Object,
	Nette\Enviroment,
	Nette\Database\Connection;

class TydenModel extends BaseModel{

	public function fetchAll($id){
		return dibi::query('SELECT * FROM [tyden] WHERE [id] = %i', $id);
	}
}
?>

Děkuji za každou radu.

Bertram
Člen | 75
+
0
-

Zkus doplnit namespace

$this->template->tyden = Model\TydenModel::fetchAll();
milde
Člen | 52
+
0
-

Bertram napsal(a):

Zkus doplnit namespace

$this->template->tyden = Model\TydenModel::fetchAll();

Tak jsem to vyzkoušel a následuje, ale chybu to hlásí o kousek vyše – u podmínky „if“. Pakliže tam doplním namespace tak se objeví hláška Strict: Non-static method Model\TydenModel::fetchAll() should not be called statically, assuming $this from incompatible context :-(

Bertram
Člen | 75
+
0
-

Já si prvé nevšiml, že ta metoda není statická. Takže ji statickou udělej,nebo ji volej jinak.

milde
Člen | 52
+
0
-

Bertram napsal(a):

Já si prvé nevšiml, že ta metoda není statická. Takže ji statickou udělej,nebo ji volej jinak.

děkuji … pomohlo to.

VaKvas
Začátečník | 111
+
0
-

Pokud to mas takto, musis si udelat instanci.. idealne v BasePresenteru:

$this->tydeModel = new Model\TydenModel;

pak muzes volat

$this->tydenModel->fetchAll();

a nebo z ni udelej statickou…

Editoval VaKvas (15. 9. 2011 14:32)

milde
Člen | 52
+
0
-

Mohu mít ještě jeden dotaz? Jak teď to „id“ dostanu do šablony? Nějak se do toho kouám asi dnes dlouho a nevidím to :-( díky alespoň za nastínění.

Bertram
Člen | 75
+
0
-

v renderTyden

$this -> template -> tydenId = $id;

Edit:
Ale jak se tak dívám tak to tam už máš v $tyden->id
Omlouvám se za ty opravy píšu z mobilu a ještě to nemám v krvi

Editoval Bertram (15. 9. 2011 15:10)

milde
Člen | 52
+
0
-

Bertram napsal(a):

v renderTyden

$this -> template -> tydenId = $id;

Edit:
Ale jak se tak dívám tak to tam už máš v $tyden->id
Omlouvám se za ty opravy píšu z mobilu a ještě to nemám v krvi

Přiznám se, že jsem tě vůbec nepochopil :-( Proměnnou předávám, jen prostě nevím jak ji dostat do šablony a jak ji tam vypsat. Poradími, prosím, někdo? děkuji

Petr Mašát
Člen | 101
+
0
-

Ahoj,
tímto kódem

$this -> template -> tydenId = $id;

řekneš presenteru aby předal aktuální šabloně pod proměnou tydenId tvoji hodnotu $id.
A Pak to už jen v šabloně vypíšeš pomocí

{$tydenId}

Jen si nejsem jist zda se ptáš přesně na toto : )

milde
Člen | 52
+
0
-

tachyon napsal(a):

Ahoj,
tímto kódem

$this -> template -> tydenId = $id;

řekneš presenteru aby předal aktuální šabloně pod proměnou tydenId tvoji hodnotu $id.
A Pak to už jen v šabloně vypíšeš pomocí

{$tydenId}

Jen si nejsem jist zda se ptáš přesně na toto : )

Ano to jsem měl na mysli, jen mi to stále hlásí nedefinovaná proměnná a nevím kde bych ji měl definovat – začínám s nette a je to tuhý boj:-(

Petr Mašát
Člen | 101
+
0
-

A máš tu definici proměný tydenId v presenteru napsanou ve správném pohledu jenž se právě používá na tuto šablonu?

milde
Člen | 52
+
0
-

tachyon napsal(a):

A máš tu definici proměný tydenId v presenteru napsanou ve správném pohledu jenž se právě používá na tuto šablonu?

nevím co přesně máš na mysli – asi jsem úplná lama. TydenPresenter mám následující:

<?php
class TydenPresenter extends BasePresenter
{
	public $tydenId;

	public function renderDefault(){
	   $this->template->tyden = TydenModel::fetchAll();
	}

	static public function renderTyden($id){

		if(!($tyden = Model\TydenModel::fetchAll($id))){
			...
		}
		$this -> template -> tydenId = $id;
	}
}
?>

Editoval milde (16. 9. 2011 14:36)

hAssassin
Člen | 293
+
0
-

cely to mas nejaky takovy divny. Proc je metoda renderTyden() static? To by byt nemelo. A mas urcite sablonu tyden.latte, ktera je ve slozce Tyden? A kdyz ji volas, predavas ji parametr ID (myslim kdyz zadas URL do prohlizece /tyden/tyden/id/)?

Jan Endel
Člen | 1016
+
0
-

parametry v url se odchytávají už v action čili:

public function actionTyden($tydenId)
{
	//prace s $tydenId
}