Diskuze: 4. díl Propojení kontroleru a pohledu - problém

PHP PHP 4. díl Propojení kontroleru a pohledu - problém American English version English version

Avatar
jAkErCZ
Člen
Avatar
jAkErCZ:

Zdravím vás narazil jsem zde na hodně zajímavý článek co se týče vývoje jednoduchého redakčního systému na struktuře MVC a došel jsem až do 4 dílu ale tam jsem narazil na problém, jakmile jsem nahodil na webserver DebookMVC03 tak mi apache nahodil chybu že tam je smyčka přeměrovávání... a nahodil mi error na řádek

http://www.itnetwork.cz/…ru-a-pohledu

PHP Fatal error:  Call to undefined method SmerovacKontroler::presmeruj() in /home/users/jakercz/inspire-gaming.g6.cz/web/kontrolery/SmerovacKontroler.php on line 47

a to se týká...

if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
        $this->kontroler = new $tridaKontroleru;
else
        $this->presmeruj('chyba');

$this->presmeruj('chy­ba'); je řádek na který to háže... tudíž nechápu proč tomu tak je když jsem si to celé zkopíroval od vývojáře který tento tutorial dělal a i tak je tam chyba...

Mohl by mi někdo poradit jak to mohu opravit?

Předem všem děkuji za odpověď

S pozdravem Dominik "jAkErCZ" korčák

Odpovědět 6. ledna 14:07
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Odpovídá na jAkErCZ
Ondřej Štorc:

A dědí ten SmerovacKontroler (nejsem si jistej názvem), z obecného kontroleru, který má tu metodu?
P.S.: Hodil by se celý kód abychom vědeli co jsi napsal...

Nahoru Odpovědět 6. ledna 14:24
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
jAkErCZ
Člen
Avatar
jAkErCZ:
<?php

// Router je speciální typ controlleru, který podle URL adresy zavolá
// správný controller a jím vytvořený pohled vloží do šablony stránky

class SmerovacKontroler extends Kontroler
{
        // Instance controlleru
        protected $kontroler;

        // Metoda převede pomlčkovou variantu controlleru na název třídy
        private function pomlckyDoVelbloudiNotace($text)
        {
                $veta = str_replace('-', ' ', $text);
                $veta = ucwords($veta);
                $veta = str_replace(' ', '', $veta);
                return $veta;
        }

        // Naparsuje URL adresu podle lomítek a vrátí pole parametrů
        private function parsujURL($url)
        {
                // Naparsuje jednotlivé části URL adresy do asociativního pole
        $naparsovanaURL = parse_url($url);
                // Odstranění počátečního lomítka
                $naparsovanaURL["path"] = ltrim($naparsovanaURL["path"], "/");
                // Odstranění bílých znaků kolem adresy
                $naparsovanaURL["path"] = trim($naparsovanaURL["path"]);
                // Rozbití řetězce podle lomítek
                $rozdelenaCesta = explode("/", $naparsovanaURL["path"]);
                return $rozdelenaCesta;
        }

    // Naparsování URL adresy a vytvoření příslušného controlleru
    public function zpracuj($parametry)
    {
                $naparsovanaURL = $this->parsujURL($parametry[0]);

                if (empty($naparsovanaURL[0]))
                        $this->presmeruj('clanek/uvod');
                // kontroler je 1. parametr URL
                $tridaKontroleru = $this->pomlckyDoVelbloudiNotace(array_shift($naparsovanaURL)) . 'Kontroler';

                if (file_exists('kontrolery/' . $tridaKontroleru . '.php'))
                        $this->kontroler = new $tridaKontroleru;
                else
                        $this->presmeruj('chyba');

                // Volání controlleru
        $this->kontroler->zpracuj($naparsovanaURL);

                // Nastavení proměnných pro šablonu
                $this->data['titulek'] = $this->kontroler->hlavicka['titulek'];
                $this->data['popis'] = $this->kontroler->hlavicka['popis'];
                $this->data['klicova_slova'] = $this->kontroler->hlavicka['klicova_slova'];

                // Nastavení hlavní šablony
                $this->pohled = 'rozlozeni';
    }

}

Zde přikládám SmerovacKontroler kde je právě zmíněný error...

Nahoru Odpovědět 6. ledna 15:38
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Odpovídá na jAkErCZ
Ondřej Štorc:

A máš v třídě kontroler tu metodu presmeruj?

Nahoru Odpovědět 6. ledna 17:22
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
jAkErCZ
Člen
Avatar
jAkErCZ:

Tady máš Kontroler.php

<?php

/*
 *             __          __                __
 *        ____/ /__ _   __/ /_  ____  ____  / /__ _________
 *       / __  / _ \ | / / __ \/ __ \/ __ \/ //_// ___/_  /
 *      / /_/ /  __/ |/ / /_/ / /_/ / /_/ / ,< _/ /__  / /_
 *      \__,_/\___/|___/_.___/\____/\____/_/|_(_)___/ /___/
 *
 *
 *      TUTORIÁLY  <>  DISKUZE  <>  KOMUNITA  <>  SOFTWARE
 *
 *      Tento zdrojový kód je součástí tutoriálů na programátorské
 *      sociální síti WWW.DEVBOOK.CZ
 *
 *      Kód můžete upravovat jak chcete, jen zmiňte odkaz
 *      na www.devbook.cz :-)
 */

// Výchozí kontroler pro DevbookMVC
abstract class Kontroler
{

        // Pole, jehož indexy jsou poté viditelné v šabloně jako běžné proměnné
    protected $data = array();
        // Název šablony bez přípony
    protected $pohled = "";
        // Hlavička HTML stránky
        protected $hlavicka = array('titulek' => '', 'klicova_slova' => '', 'popis' => '');

        // Vyrenderuje pohled
    public function vypisPohled()
    {
        if ($this->pohled)
        {
            extract($this->data);
            require("pohledy/" . $this->pohled . ".phtml");
        }
    }

        // Přesměruje na dané URL
        public function presmeruj($url)
        {
                header("Location: /$url");
                header("Connection: close");
        exit;
        }

        // Hlavní metoda controlleru
    abstract function zpracuj($parametry);

}

A pokud dobře vím tak public function presmeruj($url) by mělo být ono.

Nahoru Odpovědět 6. ledna 17:56
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
jAkErCZ
Člen
Avatar
jAkErCZ:

Bylo by možné mi tedy pomoci?

Nahoru Odpovědět 11. ledna 22:42
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.