komponenta – Cannot redeclare class

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

Zdravim,
snazim se vytvorit komponentu pro nejaky zakladni vypis tabulky a koncim na chybe Cannot redeclare class OrderList

Snazil jsem se komponentu vytvorit podle tutorialu, bohuzel mi ale neco stale unika.

Smazani cache nepomohlo.

kod komponenty:

<?php

use Nette\Application\UI;

class OrderList extends UI\Control {

    /** @var string */
    private $state;

    /** @var \Model */
    private $model;

    public function __construct(\Model $model)
    {
        parent::__construct();
        $this->model = $model;
    }

    public function setState($state){
        $this->state = $state;
    }

    public function render(){
        $this->template->setFile(dirname(__FILE__ . '/OrderList.latte'));
        $this->template->render();
    }
}

?>

kod presenteru

<?php

use Nette\Application\UI\Form;

class OrdersPresenter extends BasePresenter
{
    protected function createComponentOrderList() {
        $orderList = new OrderList($this->model);
        return $orderList;
    }
}
?>

kod sablony OrderList.latte:

{block content}

<h1>Objednávky</h1>
{control orderList}
{/block}
Uz z toho zacinam byt zoufaly, urcite nekde prehlizim nejakou blbost.
hAssassin
Člen | 293
+
0
-

budes tam mit tridu OrderList definovanou nekde dvakrat, cili jeste jednou v jinym souboru. V ty chybovy hlasce by melo byt tusim napsany i kde. Pomuze bud prejmenovani nebo pouziti namespace.

elden46
Člen | 37
+
0
-

Tak jsem znovu projel cely projekt a OrderList nikde jinde definovan neni. Dokonce jsem to protahnul i fulltextovym vyhledavanim nad celym adresaerm a nic.
Prejmenovani nepomohlo, podle ladenky redeklaruju i prejmenovanou tridu.

uestla
Backer | 799
+
0
-

Cítím z toho RobotLoader…

elden46
Člen | 37
+
0
-

Ano, cache jsem několikrat promáznul.

uestla
Backer | 799
+
0
-

@JuniorJR: O smazání cache psal v prvním příspěvku…

Neregistruješ RobotLoader dvakrát? Resp. nevkládáš někde dvakrát soubor s třídou? Např. jednou ti ji načte RobotLoader a někde máš natvrdo require/include "OrderList.php";

Editoval uestla (3. 2. 2012 16:43)

elden46
Člen | 37
+
0
-

Nazdar,
nic neregistruju dvakrat ani nic nerequireuju, aplikace je teprve v zacatku, ma par presenteru a toto je prvni komponenta. Je to postavene vicemene na skeletonu, do zadnych uprav logiky jsem se (snad) nepoustel.
Nepomaha ani prejmenovani komponenty (Cannot redeclare class <NoveJmeno>).

Ladenka mi vyhazuje chybu u radku s render(), kdyz render() okomentuju, tak mi aplikace naspadne (a samozrejme komponentu nezobrazi).

public function render(){
        $this->template->setFile(dirname(__FILE__ . '/OrderList.latte'));
        $this->template->render();
    }
Jan Endel
Člen | 1016
+
0
-

Jediné co mě napadá je, abys aplikaci zipnunl a někam ji hodil. Páč nám asi neříkáš všechno, kód co tu uvádíš by měl být zcela v pořádku.

duke
Člen | 650
+
0
-

Změň:

$this->template->setFile(dirname(__FILE__ . '/OrderList.latte'));

na:

$this->template->setFile(dirname(__FILE__) . '/OrderList.latte');

To první vrací cestu k php kódu tvé komponenty, nikoliv k latte souboru.

elden46
Člen | 37
+
0
-

@duke: jezisimarja, dekuju! To je ono, na to bych neprisel ani za sto let!