NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
jAk3r
Člen
Avatar
jAk3r:6.1.2016 14:07

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.1.2016 14:07
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na jAk3r
Ondřej Štorc:6.1.2016 14:24

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.1.2016 14:24
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
jAk3r
Člen
Avatar
jAk3r:6.1.2016 15:38
<?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.1.2016 15:38
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá na jAk3r
Ondřej Štorc:6.1.2016 17:22

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

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

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.1.2016 17:56
Pokud něčeho chceš dosáhnout, musíš si za tím jít.
Avatar
jAk3r
Člen
Avatar
jAk3r:11.1.2016 22:42

Bylo by možné mi tedy pomoci?

Nahoru Odpovědět
11.1.2016 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.