Procvič si angličtinu zdarma s naším americkým e-learningem! Learn more
Pouze tento týden sleva až 80 % na celý Java e-learning!

Lekce 2 - .htaccess, autoloader a obecný kontroler

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Popis MVC architektury, jsme si vysvětlili MVC architekturu. Již víme, že stránka se bude skládat z komponent 3 typů: kontrolerů, modelů a pohledů. Dnes si připravíme prostředí, začneme souborem .htaccess, dále si v index.php nastavíme PHP dle našich potřeb a vytvoříme předka pro naše kontrolery.

Co budete potřebovat je zprovozněný lokální server (viz. XAMPP - Instalace Apache, PHP a MySQL na Windows), ale to již určitě máte. Přesuňme se tedy do výchozí složky (v XAMPP defaultně c:/xampp/htdocs) a vše v ní odstraňme.

Pozor! Je opravdu důležité, aby jste systém vložili právě do této kořenové složky, když pro něj uděláte podsložku, nebude fungovat!

Je to kvůli hezkým URL adresám, viz dále. Pokud máte na localhostu více projektů, nastavte pro projekt subdoménu.

Adresářová struktura

Vytvořme si 3 složky pro nám již známe 3 typy komponent. Budou se jmenovat: kontrolery, modely a pohledy. Rovnou si zde připravte i soubory .htaccess a index.php.

Adresářová struktura MVC frameworku v PHP

.htaccess

Určitě znáte soubor .htaccess. Slouží ke konfiguraci webserveru Apache a určuje, co se má stát, když uživatel vyťuká URL adresu. Vše se děje ještě předtím, než se vůbec spustí jazyk PHP jako takový.

Vytvořme tedy tento soubor (i s tou tečkou na začátku názvu) v kořenové složce. Kolega jednou pravil, že stejně jako nechce pochopit ženu, tak nechce pochopit .htaccess. Nastavení Apache je opravdu dost krkolomné a proto si s ním nelamte hlavu a berte ho jako hotovou věc.

Jako první zakážeme výpis souborů ve složce na webu, budou tedy zvenku skryty, což my chceme. Přidáme řádek:

Options -Indexes

Hezké URL adresy

Klasická adresa PHP aplikace vypadá asi takto:

http://wwww.domena.cz/index.php?clanek=nazev-clanku&parametr=hodnota

To je poměrně ošklivé, že? V naší aplikaci budeme používat tzv. hezké URL adresy, ta samá adresa bude u nás vypadat takto:

http://wwww.domena.cz/nazev-clanku/hodnota

To je mnohem hezčí. Zpracování URL adres necháme plně na PHP a v Apache toto "vypneme" a všechny dotazy přesměrujeme na soubor index.php, kde si URL sami zpracujeme. Apache by totiž jinak bral nazev-clanku jako složku a tam hledal podsložku hodnota a v ní index. Zapneme přesměrovávací engine a přidáme pravidlo k přesměrování, kde až na určité typy souborů v URL přesměrujeme vždy na index.php:

RewriteEngine On
# RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule !\.(css|js|icon|zip|rar|png|jpg|gif|pdf)$ index.php [L]

Znak "#" je komentář, příkaz "RewriteBase /" je tedy zakomentovaný. To proto, že na localu ho nepotřebujeme, ale některé webservery v produkci (až budeme web nahrávat na internet) bez tohoto přepínače nefungují, až budete hotový web nahrávat na server, musíte to zkusit :)

RewriteCond určují, že se nemá přesměrovat v případě, že soubor nebo složka existuje. Pokud tedy voláme např.:

http://wwww.domena.cz/soubor.txt

Bude tento soubor stažen (pokud existuje) a pokud ne, budeme přesměrováni na index. Kdybychom přesměrovali úplně vše (bez těch několika podmínek), nemohli bychom stahovat žádné soubory a vždy by se nám zobrazil index. Přesměrování jsme si ještě pojistili výčtem nejdůležitějších přípon, které se nebudou přesměrovávat. Všechny ostatní URL adresy směřují na index.

Jako poslední do .htaccess přidáme zpracování přípony .phtml, aby nám nikdo nekoukal do zdrojáků šablon. Soubor .phtml se bude chovat úplně stejně, jako soubor .php. Přidejme tento řádek:

AddType application/x-httpd-php .php .phtml

Zde máme hotovo.

index.php

Vytvořme si index.php, tedy soubor, ve kterém započne veškerá komunikace a kam se budou směřovat všechny URL adresy.

Celý web budeme tvořit v kódování UTF-8, nastavte si tedy toto kódování jako výchozí ve svém editoru. Pokud používáte IDE (PHPStorm, Netbeans, Eclipse), tak tam je již velmi pravděpodobně nastavené. Pokud se vás bude editor ptát na BOM, tak s ním pracovat nebudeme (kódování UTF-8 without BOM).

Jako první samozřejmě vložíme direktivu <?php a nastavíme PHP interní kódování na UTF8, díky tomu poté budou správně fungovat PHP funkce pro práci s textovými řetězci. Docílíme toho takto:

<?php
mb_internal_encoding("UTF-8");

Autoloader

V systému budeme často tvořit instance různých tříd a je velmi nepohodlné tyto třídy ručně requirovat/in­cludovat. Proto PHP disponuje možností vytvořit funkci, která se zavolá poté, co je volána neexistující třída. V této funkci si třídu načteme. Třídy se tedy automaticky načítají ve chvíli, kdy je potřebujeme použít.

Načítat budeme vlastně 2 typy tříd: modely (ze složky modely) a kontrolery (ze složky kontrolery). Pohledy u nás nebudou třídami a budou připomínat spíše HTML stránky. Naše autoload funkce tedy bude muset poznat, zda se jedná o model nebo o kontroler a podle toho sáhne do příslušné složky. Jak to uděláme?

Opět úplně jednoduše, názvy tříd kontrolerů budou končit na Kontroler. Funkce autoload by mohla vypadat takto:

function autoloadFunkce($trida)
{
        // Končí název třídy řetězcem "Kontroler" ?
        if (preg_match('/Kontroler$/', $trida))
                require("kontrolery/" . $trida . ".php");
        else
                require("modely/" . $trida . ".php");
}

Prvotní podmínka používá tzv. regulární výraz, který ověří, zda název třídy končí řetězcem "Kontroler". Pokud ano, načte soubor ze složky kontrolery, v opačném případě třídu bude hledat ve složce modely.

Naší funkci ještě zaregistrujeme, aby ji PHP vykonávalo jako autoloader:

spl_autoload_register("autoloadFunkce");

Až budeme mít nějaké kontrolery a modely, bude nám stačit napsat:

$mu = new ManazerUzivatelu();
$smerovac = new SmerovacKontroler();

Jelikož PHP nebude vědět o třídách ManazerUzivate­lu.php ve složce modely a třídě SmerovacKontro­ler.php ve složce kontrolery, zavolá naší funkci autoload. Ta nám v prvním případě vykoná příkaz:

require('modely/ManazerUzivatelu.php');

a v druhém případě:

require('kontrolery/SmerovacKontroler.php');

Stačí založit třídu a nemusíme se o nic starat.

Třída se samozřejmě musí jmenovat stejně, jako soubor, ve kterém je obsažena, ale tak by tomu mělo být vždy.

Pozn. ve velmi starém PHP, které bohužel ještě běží na některých free serverech, není možné používat funkci spl_autoload_re­gister() a je místo ní třeba použít starší __autoload(), viz PHP manuál.

Obecný kontroler

Vytvořme si ještě abstraktní třídu pro obecný kontroler, ze kterého budou všechny naše kontrolery dědit. Ve složce kontrolery si založíme Kontroler.php. Na začátek souboru nezapomeneme vložit direktivu <?php.

Třída bude obsahovat 3 atributy. První bude pole s daty, tam si bude kontroler ukládat data získaná od modelů. Toto pole se následně předá pohledu, který data vypíše uživateli. Tímto způsobem tedy zrealizujeme předávání dat mezi modelem a pohledem. Druhý atribut bude název pohledu, který se má vypsat. Poslední atribut bude hlavička HTML stránky, přesněji 3 její atributy: titulek, keywords a description, kterou musí mít každá HTML stránka. Atributům přiřadíme i výchozí hodnoty.

<?php
abstract class Kontroler
{

        protected $data = array();
        protected $pohled = "";
        protected $hlavicka = array('titulek' => '', 'klicova_slova' => '', 'popis' => '');

}

Třída bude mít další 3 metody. Jedna bude ta hlavní, ve které zpracuje kontroler své parametry. Tu si bude každý kontroler implementovat sám, proto ji zde označíme pouze jako abstraktní. Pojmenujeme ji jednoduše zpracuj a její argument pojmenujeme $parametry:

abstract function zpracuj($parametry);

Další funkce vypíše pohled uživateli. Pokud je nějaký pohled zadaný, jednoduše ho requirujeme. Předtím rozbalíme proměnné z pole $data pomocí funkce extract. Všechny indexy (klíče) pole budou v šabloně přístupné jako běžné proměnné.

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

Pokud si tedy v kontroleru uložíme takto nějaký klíč do pole:

$this->data['promenna'] = 'hodnota';

V šabloně bude proměnná přistupná jednoduše takto:

<strong>Proměnná je: </strong><?= $promenna ?>

Pokud jste si všimli, že nejsou ošetřené HTML entity, máte bod. Časem to napravíme.

Jako poslední metodu si do kontroleru přidáme jednoduché přesměrování na jinou stránku a zastavení zpracování současného skriptu. Bude se nám často hodit.

public function presmeruj($url)
{
        header("Location: /$url");
        header("Connection: close");
        exit;
}

V příští lekci, Směrovač (router), si vytvoříme svůj první kontroler, bude jím směrovač (router) :) Zdrojové kódy dnešního výtvoru máte samozřejmě u článku jako vždy.


 

Stáhnout

Staženo 3322x (2.88 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
34 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Předchozí článek
Popis MVC architektury
Všechny články v sekci
Jednoduchý redakční systém v PHP objektově (MVC)
Miniatura
Následující článek
Směrovač (router)
Aktivity (6)

 

 

Komentáře

Avatar

Redaktor
Avatar
:23.12.2012 17:11

Jakou výhodu má ta "hezčí" adresa? Tedy krom toho, že namísto přebrání ze superglobálních proměných to pak musím ještě parsovat?
A nebylo by vhodnější namísto krkolomého dotazu prostě použít regulární výraz ".Kontroler$"?

 
Odpovědět 23.12.2012 17:11
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na
David Čápka:23.12.2012 17:16

Výhodu má takovou, že je hezčí a dobře se pamatuje, proto se jmenuje "pretty url" (hezká url). Používá je většina vážnějších webů a redakčních systémů.

S regulárem máš pravdu, ten by se tam hodil. Až seriál dokončím, zapracuji nashromážděné připomínky.

Odpovědět 23.12.2012 17:16
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na
Kit:23.12.2012 17:40

Hezká URL se většinou řeší už v .htaccess, takže se v PHP parsovat už nemusí a použije se přímo superglobální pole $_GET.

Odpovědět 23.12.2012 17:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:23.12.2012 17:56

.htaccess je zlo, kterému bych se zde rád vyhnul jak jen to půjde. Pokud máš nějaké funkční řešení, můžeme ho zde alternativně uvést.

Odpovědět 23.12.2012 17:56
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Lukáš Volprecht:23.12.2012 18:06

Hezký článek, mohu se zeptat, kdy bude pokračování?

Edit: aha, koukám že již pokračování je :D

Editováno 23.12.2012 18:08
 
Odpovědět 23.12.2012 18:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Lukáš Volprecht
David Čápka:23.12.2012 18:10

Je a dnes s trochou štěstí napíši další, uvidíme :) Přes svátky by tu mohl vzniknout kompletní seriál pro redakční systém na MVC architektuře.

Odpovědět 23.12.2012 18:10
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:23.12.2012 18:17

Do .htaccess se hodí ukládat vše, co se týká konkrétního hostingu. Přihlašovací údaje k databázi se tam dají přihodit také, ale vhodnější je např. .htmysql nebo tak nějak. Program je pak snáze přenositelný.

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.domena\.cz
RewriteRule ^([^/]+)/([^/]+)$ %{DOCUMENT_ROOT}/index.php?clanek=$1&parametr=$2 [L,QSA]
Odpovědět 23.12.2012 18:17
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:23.12.2012 19:03

Díky, vyzkouším :)

Odpovědět 23.12.2012 19:03
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Kit:25.12.2012 10:10

Funkce pro autoload se dá zajímavým způsobem zjednodušit:

function __autoload($class) {
    require(preg_replace('/([a-z0-9])([A-Z])/', "$1$/$2", $class).'.class.php';
}

Pokud se třída jmenuje

KontrolerProRizeniVelkehoProjektu

bude se natahovat ze souboru

Kontroler/Pro/Rizeni/Velkeho/Projektu.class.php
Odpovědět 25.12.2012 10:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Neaktivní uživatel:1.11.2013 22:01

Mám pocit, že tu už stejná otázka byla ale nenašel jsem ji - může to fungovat i v podsložce? Systém by byl ve složce rs a .htaccess ignoroval všechny adresy jako www.domena.cz, www.domena.cz/jinaslozka/, ..., ale u adresy www.domena.cz/rs/ by adresu předal právě souboru index.php ve složce rs.

Odpovědět 1.11.2013 22:01
Neaktivní uživatelský účet
Avatar
Kit
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
Kit:1.11.2013 22:08

Ano, může. Jen je dobré si uvědomit, že .htaccess se PHP nijak netýká, ten konfigurák je pouze pro Apache.

Odpovědět 1.11.2013 22:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Neaktivní uživatel:1.11.2013 22:19

No dobře, ale Apačové berou url a podstrčí ho mému index.php, že? Můžeš mě nějak nasměrovat, jak na to?

Editováno 1.11.2013 22:20
Odpovědět 1.11.2013 22:19
Neaktivní uživatelský účet
Avatar
Silvinios
Redaktor
Avatar
Silvinios:12.11.2013 20:27

Děkuji moc za výborný článek. Po dlouhé době jsem se vrátil k PHP a přesně tohle jsem hledal.

 
Odpovědět 12.11.2013 20:27
Avatar
mkub
Redaktor
Avatar
Odpovídá na David Čápka
mkub:16.11.2013 10:35

.htaccess neumoznuje iba pekne URL, ale aj prednastavit chybove stranky, zapnut komprimaciu, cacheovanie u klienta, ako aj obmedzit pristup k strankam niektorym uzivatelom,...

 
Odpovědět 16.11.2013 10:35
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na mkub
David Čápka:16.11.2013 10:48

To sice ano, ale pracuje se s tím tak blbě, že to většina lidí raději dělá mv PHP.

Odpovědět 16.11.2013 10:48
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na mkub
Kit:16.11.2013 11:21

To sice .htaccess umí, ale většina webmasterů to nezvládá a raději to lepí v PHP.

Odpovědět 16.11.2013 11:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
mkub
Redaktor
Avatar
Odpovídá na David Čápka
mkub:16.11.2013 16:56

najjednoduhsie v .htaccess su tie chybove stranky, co sa tyka tych peknych URL, a ostatnych veci, tak to uz je magia, ktoru este som nezvladol...

ale na chybove stranky staci v tomto formate:

ErrorDocument ErrCode stranka

kde ErrCode je chybovy kod (400-414, 500-506)
a stranka je chybova stranka, ktora sa ma pri vzniku danej chyby zobrazit

napr.:

ErrorDocument 404 /404.html
Editováno 16.11.2013 16:57
 
Odpovědět 16.11.2013 16:56
Avatar
Kit
Redaktor
Avatar
Odpovídá na mkub
Kit:16.11.2013 17:16

Potíž je v tom, že pokud používáš redakční systém, tak vlastně všechny stránky existují. PHP se totiž nejprve musí zeptat databáze a teprve tam se dozví, že soubor z URL neexistuje.

Odpovědět  +1 16.11.2013 17:16
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Michal Maršálek:30.12.2013 10:26

Můžete mi prosím vysvětlit, proč bych měl mít všechny modely, pohledy a kontrolery v jedné složce? Přijde mi mnohem logičtější mít všechny soubory týkající se dané stránky v jedné složce. Navíc k některým stránkám bych potřeboval načíst vlastní css a js. Adresářovou struktury bych měl:

.htaccess
index.php
/homePage
   HomePageModel.php
   HomePageController.php
   HomePageView.phtml
   HomePage.js
   HomePage.css
/clanek
   ClanekModel.php
   ClanekController.php
   ClanekView.phtmĺ
   Clanek.js
   Clanek.css
/mail
   MailModel.php
   MailController.php
   MailView.phtml
   Mail.js
   Mail.css
   /MailImages
      mailIcon.png
/router
   RouterModel.php
   RouterController.php
   RouterView.php
   Router.js
   Router.css
   /RouterImages
      logo.png
      fb.png
      gplus.png
/private
   Controller.php

Jsem opravdu začátečník, tak na to prosím berte ohled. ;)

Editováno 30.12.2013 10:26
 
Odpovědět 30.12.2013 10:26
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michal Maršálek
Kit:30.12.2013 10:38

Jak to uděláš, tak to budeš mít. Běžně mám celý projekt v jednom adresáři a podadresáře dělám až tehdy, když je to potřebné a má to nějaký význam. Například považuji za přirozené, že v adresáři CSS se nachází vše kolem designu včetně obrázků. PHP třídy v klidu dám do druhého podadresáře, zjednoduší se mi tím autoinclude. A ve třetím podadresáři mám databázi.

Odpovědět 30.12.2013 10:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Michal Maršálek:30.12.2013 13:55

Ano, četl jsem, že MVC není striktně určeno a že každý ho dělá jinak. Princip MVC mě nadchnul, jen jsem trochu zmaten strukturou složek a chtěl jsem vědět, jestli to takhle nevadí.

Editováno 30.12.2013 13:56
 
Odpovědět 30.12.2013 13:55
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michal Maršálek
Kit:30.12.2013 14:08

Model by měl být jeden a měl by mít doménovou logiku. Viewerů a controllerů můžeš mít kolik chceš.

Je zbytečné controller sdružovat s viewerem, protože mezi nimi není téměř žádná vazba.

Editováno 30.12.2013 14:08
Odpovědět 30.12.2013 14:08
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Michal Maršálek:30.12.2013 14:09

A ještě se chci zeptat, jestli je lepší v .htacces js, css a obrázky nepřesměrovávat a přímo je načítat a nebo mít na to kontrolery, které je budou vypisovat.

 
Odpovědět 30.12.2013 14:09
Avatar
Kit
Redaktor
Avatar
Odpovídá na Michal Maršálek
Kit:30.12.2013 14:19

JS, CSS, obrázky a jiná multimédia je lepší načítat přímo bez přesměrování. Jen je dobré v .htaccess ošetřit HTTP_REFERER, aby ti ty obrázky někdo on-line nekradl.

Odpovědět 30.12.2013 14:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
00
Člen
Avatar
00:6.2.2014 16:27

Jsem zmatený z toho, jak se v 4. díle objevil nadpis stránky, když se hlavicka nerozbaluje. Zajímalo by mě, jak to je možné.

 
Odpovědět 6.2.2014 16:27
Avatar
00
Člen
Avatar
Odpovídá na 00
00:6.2.2014 16:48

Poradíte mi někdo, co jsem přehlédl?

 
Odpovědět 6.2.2014 16:48
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na 00
David Čápka:6.2.2014 16:55

Co se nerozbaluje? Je to tam vysvětlené krok po kroku, do tagu article se vloží šablona článku a její součástí je nadpis.

Editováno 6.2.2014 16:56
Odpovědět 6.2.2014 16:55
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
00
Člen
Avatar
Odpovídá na David Čápka
00:6.2.2014 17:12

Nevím jak se do pohledu dostává hlavička

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

já bych čekal že tam bude ještě

extract($this->hlavicka);
 
Odpovědět 6.2.2014 17:12
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na 00
David Čápka:6.2.2014 17:22

Jo takhle. To je v hlavním kontroleru, vezme si hlavičku vloženého a vytvoří proměnné pro šablonu.

Odpovědět 6.2.2014 17:22
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
00
Člen
Avatar
Odpovídá na David Čápka
00:6.2.2014 17:23

Děkuji

 
Odpovědět 6.2.2014 17:23
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):23.2.2014 15:58

Už dávnejšie mám problém vytvoriť v zložke na win7 súbor .htaccess.
Vždy, keď sa snažím premenovať textový súbor, vypíše mi to:

Odpovědět 23.2.2014 15:58
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):23.2.2014 15:59

Viem, že si ho môžem odniekiaľ stiahnuť a nakopírovať ho tam, ale ide mi o princíp. Prečo mi to nejde? :@

Odpovědět 23.2.2014 15:59
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):23.2.2014 16:07

Sorry, tak už som na to prišiel. V PSPad editore som si nový súbor uložil ako .htaccess a je to OK.

Odpovědět 23.2.2014 16:07
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):23.2.2014 18:26

Ahoj, v miestnych tutoriáloch som našiel, že mb_strpos('re­tazec', 'podretazec');
vráti 1, ak sa podreťazec nachádza v reťazci, teda sú tam len dva výrazy.
Na nete som v manuáli našiel, že tam môžu byť ešte dva ďalšie výrazy:

int mb_strpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = mb_internal_encoding() ]] )

Preto sa chcem spýtať, či som podmienku správne pochopil.

// Ak je dĺžka $trieda >= ako dĺžka Kontroler (teda 9) a zároveň
if ((mb_strlen($trieda) >= mb_strlen("Kontroler")) &&
            // názov triedy obsahuje podreťazec "Kontroler"
            (mb_strpos($trieda, "Kontroler",
            // a dĺžka názvu triedy zmenšená o dĺžku slova "Kontroler"
            mb_strlen($trieda) - mb_strlen("Kontroler")))
            // všetky výrazy sa (natvrdo) nerovnajú false
            !== false)
Odpovědět 23.2.2014 18:26
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovědět 23.2.2014 18:30
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Libor Šimo (libcosenior):23.2.2014 18:40

Teda vlastne podmienka preverí, či názov triedy má podreťazec "Kontroler" ale nesmie mať názov len Kontroler.
Je to tak?

Odpovědět 23.2.2014 18:40
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:23.2.2014 18:52

Teď jsem si všimnul, že tam máš chybu. Třetí řádek (nepočítám komentáře) nekontroluje délku ale říká funkci mb_strlen, že "Kontroler" má být na konci názvu.

Odpovědět 23.2.2014 18:52
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):23.2.2014 19:13

Myslíš toto?

mb_strlen($trieda) - mb_strlen("Kontroler")

tak to teda nechápem.
Môžeš mi to prosím vysvetliť?

Odpovědět 23.2.2014 19:13
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Šupák
Avatar
Odpovídá na Libor Šimo (libcosenior)
Honza Bittner:23.2.2014 19:24

Také by jsi mohl teoreticky vypustit tu první část podmínky.

Když v další části kontroluješ jestli obsahuje podřetězec "Kontroler", což také říká, že musí být >= délce, jako v první části...

Odpovědět 23.2.2014 19:24
Milovník Dartu. Student FIT ČVUT. Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/...
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Honza Bittner
Zdeněk Pavlátka:23.2.2014 20:10

Tahle verze je rychlejší v případě krátkého názvu. Používá se ale příliš málo na to, aby to byl větší rozdíl.

Odpovědět 23.2.2014 20:10
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):23.2.2014 20:17

No nič, budem si to musieť otestovať. Tretia položka v mb_strpos() je offset, teda asi nejaký posun.

Odpovědět 23.2.2014 20:17
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:23.2.2014 20:28

Musím se přiznat, že nějak také netuším co jsem tím tenkrát myslel, nicméně se zdá, že to funguje :` Je dost možné, že jsem vzal nějakou hotovu funkci ze StackOverflow, časem to nahradím něčím jednodušším, ale v tomhle případě o to nejde.

Odpovědět  +1 23.2.2014 20:28
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
Zdeněk Pavlátka:23.2.2014 20:42

Je to jednoduché:

//   [email protected]
//-        Kontroler
//= [email protected]

@ označuje získaný index - "Kontroler" musí být na konci, tak se prostě začne kontrolovat až od místa, kde by měl začínat. Zbytek stringu není třeba kontrolovat. Pokud by jsme vynechali první část podmínky, dostali bychom se u krátkých názvů do záporných indexů. A to se stát nesmí.

Uf, připadá mi to, jako psát tutoriál step by step. :D

Editováno 23.2.2014 20:43
Odpovědět  +2 23.2.2014 20:42
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Zdeněk Pavlátka
David Čápka:23.2.2014 21:03

Jo, jasně, už jsem nějaký vygumovaný dneska :)

Odpovědět 23.2.2014 21:03
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na Zdeněk Pavlátka
Libor Šimo (libcosenior):24.2.2014 4:30

Díky, za tutoriál :-D, keď som si uvedomil, že je to nejaký posun, tiež ma to napadlo, ale už som nemal chuť to testovať.
Ale aj tak to ešte pozriem bez prvého riadku. ;-)

Odpovědět 24.2.2014 4:30
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Rostislav Křídlo:9.3.2014 14:55

Wokna si myslí, že soubor s koncovkou před písmenem neexistuje. Proto tvorba souboru .htaccess může probíhat i takto: Vytvořte obyčejný textový dokument s .txt. Poté ho otevřete v klasickém poznámkovém bloku. Nyní jděte cestou : Soubor > Uložit jako.. > a napište tam : ".htaccess" (i s uvozovkami) a uložte. Nyní jste úspěšně vytvořili soubor .htaccess .

Odpovědět  +1 9.3.2014 14:55
MiracleSoft! www.miraclesoft.com
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:23.3.2014 10:44

K ověření zda třída končí na "Kontroler" jsem použil regulární výraz, původní kód byl opravdu zbytečně složitý.

Odpovědět 23.3.2014 10:44
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
orientak.srb
Člen
Avatar
orientak.srb:18.4.2014 10:33

Řek bych že je tady v tom zápisu chyba (3. zdroják od konce):
$this->$data['promenna'] = 'hodnota';
před polem data by neměl být dolar ne?

 
Odpovědět  +1 18.4.2014 10:33
Avatar
Libor Šimo (libcosenior):10.5.2014 21:20

V úvode článku je napísané:
"Pozor! Je opravdu důležité, aby jste systém vložili právě do této kořenové složky, když pro něj uděláte podsložku, nebude fungovat! Je to kvůli hezkým URL adresám, viz dále."
Ja sa pokúšam sprevádzkovať tento systém na ubuntu cez IDE netbeans, ale tam sa nejak neviem dopátrať k tomu, aby som mohol otvoriť subor.php priamo, teda

localhost/subor.php

Čo som doteraz našiel (tretí deň) je toto:

locahost/~<user>/nazov_projektu/subor.php

Má niekto skúsenosť ako tento problém riešiť? Nemusí to byť len v netbeans.

Odpovědět 10.5.2014 21:20
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na orientak.srb
David Čápka:10.5.2014 21:24

Dík, opraveno.

Odpovědět 10.5.2014 21:24
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Čápka:10.5.2014 21:25

V článku je napsáno, ať to dáš do kořenové složky, tak to prostě nahraj do kořenové složky.

Odpovědět 10.5.2014 21:25
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):10.5.2014 21:41

Skúšal som aj to a nefunguje. Proste inakšie ako som napísal sa súbor.php nedá spustiť.

Editováno 10.5.2014 21:43
Odpovědět 10.5.2014 21:41
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
janeczko.jan
Člen
Avatar
janeczko.jan:29.5.2014 19:41

Jak by se dalo udělat abych nemusel mit dany web v kořenove složce serveru, ale mohl podobnych webu udelat vice každy do jedne podsložky? protože s timhle postupem muzu cely server pouzit max na jeden web

 
Odpovědět 29.5.2014 19:41
Avatar
jenda
Člen
Avatar
jenda:3.6.2014 14:13

Ahoj,
poslední dotaz mne také zajímá. S mvc jsem na začátku, ale v rootu mám bohužel hlavní web, a tedy potřebuji do subdomény. Tedy třeba test.domena.cz.. Šlo by prosím jen zmínit, co eventuálně změnit, a my už si to nějak dohledáme?

Moc díky jenda

 
Odpovědět 3.6.2014 14:13
Avatar
domino.turak
Člen
Avatar
domino.turak:11.6.2014 12:23

Bol som 1000. v poradi ktory si stiahol zdrojove kody k tomuto clanku. Nedostanem zato nejake premiove body? :D

Odpovědět 11.6.2014 12:23
"Never give up!"
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na janeczko.jan
David Čápka:11.6.2014 13:07

Se subdoménou problém není. Jakmile vytvoříš subdoménu třeba sub.domena.cz a nasměruješ ji do nějaké složky, bere se složka jako root. Problém je jen v tom, když je v url třeba domena.cz/sub.

Odpovědět 11.6.2014 13:07
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jenda
David Čápka:11.6.2014 13:08

Mělo by to fungovat beze změn.

Odpovědět 11.6.2014 13:08
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
pemap
Člen
Avatar
pemap:25.7.2014 10:57

Pokud chce někdo více složek a v nich pěkné url, je nutno v .htaccess pro každou danou složku zadat minimálně toto:

# Zapnutí mod_rewrite. Radeji vždy, než zapomenout.
RewriteEngine On

# Adresář, ze kterého se budou brát stránky pro mod_rewrite.
RewriteBase /nazev_adresare/

#Chybové stránky:
ErrorDocument 404 /nazev_adresare/no-page.php

Dále pak je možno dopsat například doplnění lomítka na konci url pokud chybí, bez a s www, přepisovací pravidla pro pěkné url, heslování, úprava defaultního výpisu obsahu adresáře, ...

 
Odpovědět  +2 25.7.2014 10:57
Avatar
dusekpetrcb
Člen
Avatar
Odpovídá na pemap
dusekpetrcb:24.8.2014 13:56

Tohle funguje - díky, taky mi furt vrtalo hlavou, jak to přelstít, abych nemusel mít všechno v kořenové složce. Ještě hloupý dotaz: takže pro každý samostatný projekt si vytvořím vlastní složku v kořenové složce a doplním příslušnou instrukci RewriteBase do htaccess?

 
Odpovědět 24.8.2014 13:56
Avatar
dusekpetrcb
Člen
Avatar
dusekpetrcb:24.8.2014 14:11

A ještě prosím o jednu radu:
Chtěl bych, abych si mohl ladit různé aplikace na localhostu tímto způsobem:
URL localhost/app1/pa­rametry..., localhost/app2/pa­rametry atd.
Každá apliakace by byla ve vlastním adresáři v kořenové složce. Jak toho dosáhnout? Díky.

Když jsem změnil htaccess dle rady pemapa, přestalo fungovat toto:

// prazdny/chybejici parametr URL => presmerovani na uvod
if (empty($url[0])) {
$this->redirect('ar­ticle/intro');
}

Redirect se neprovede, program se vlastně nedostane ani k této podmínce, ale rovnou to zahlásí: Přístup odmítnut!

Nemáte právo pro přístup do požadovaného adresáře
// prazdny/chybejici parametr URL => presmerovani na uvod
if (empty($url[0])) {
$this->redirect('ar­ticle/intro');
}

 
Odpovědět 24.8.2014 14:11
Avatar
pemap
Člen
Avatar
Odpovídá na dusekpetrcb
pemap:2.9.2014 14:07

Ano, tak jak píšeš: Do RewriteBase píšeš cestu, kde máš uložen projekt, od kořenové složky localhostu - pro přehlednost a jednoduchost, každý projekt v jiném adresáři...

Jinak co se týká druhého dotazu, tak nevím, zda jsem tě správně pochopil správně...

Soubor .htaccess

# Zapnuti mod_rewrite
RewriteEngine On

# Adresar, ze ktereho se budou brat stranky pro mod_rewrite.
RewriteBase /app1/

Soubor index.php v adresáři app1

<?php

function getURL()
{
        return filter_input(INPUT_GET, "url");
}

$url = getURL();

if (empty($url) || ($url === NULL)) {
        echo "URL nebylo specifikovano.<br>";
} else {
        // echo "URL: " . $url . ".<br>";
        header("HTTP/1.1 301 Moved Permanently");
        header("Location: tajna.php");
        header("Connection: close");
}

Soubor tajna.php v adresáři app1, na který se dostaneš po zadání hodnoty do proměnné url v adrese [http://localhost/app1/index.php?…]

<?php
echo "Jsi na tajne strance.";
 
Odpovědět 2.9.2014 14:07
Avatar
bestatomas
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
bestatomas:9.2.2015 22:58

Také mě to nefungovalo. Mám HTTP server Apache 2.2 a zprovoznil jsem to po odkomentování příkazu v httpd.conf. Jedná se o příkaz LoadModule rewrite_module modules/mod_rew­rite.so.
Poté mi to začlo běhat bez chyb.
Návod viz zde: http://tildemark.com/…s-on-apache/

 
Odpovědět 9.2.2015 22:58
Avatar
antoninfoltyn:13.3.2015 22:20

Zdravím,

extract($this->data);

Způsobí že proměnné z pole $thist->data můžu použít v šabloně rozlozeni.phtml ale jak docílit toho, aby stejné proměnné šly použít i ve vnořeném pohledu? Tedy když z pohledu rozlozeni.phtml voláme opět:

$this->kontroler->vypisPohled();

Už se s tím peru půl dne a nějak se ztrácím. :-)

Respektive dotaz jinak; jak předám vnořenému pohledu (napři chyba.phtml) data z jeho kontroleru (např. chybaKontroler­.php)

 
Odpovědět 13.3.2015 22:20
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na antoninfoltyn
Matúš Petrofčík:13.3.2015 23:10

predaj podkontroleru premenné z kontroleru, pokiaľ je premenná $this->kontroler->data dostupná z vonku (public, verejná).

$this->kontroler->data = $this->data;

ale bacha aby si si neprepísal $this->data v podkontroleru

tak to môžeš spraviť aj naopak

$this->data = $this->kontroler->data;

//edit: aha, ty sa pýtaš asi na niečo iné... :

jednoducho v chybaKontroler.php pridaj premenné do $this->data

$this->data['nazov'] = 'hodnota';

a potom sa ti extract-nu do chyba.phtml a normálne ich vypíšeš napríklad ako

<?=$nazov?>
Editováno 13.3.2015 23:12
Odpovědět  +1 13.3.2015 23:10
obsah kocky = r^2 ... a preto vlak drnká
Avatar
Odpovídá na Matúš Petrofčík
antoninfoltyn:14.3.2015 0:06

Díky za reakci! :-) Jednoduché jak facka ale totálně jsem se zacyklil.

Potřeboval jsem z 'SmerovacKontro­ler.php' dostat proměnné až do vnořeného pohledu 'chyba.phtml'. A díky Tobě se povedlo.

$this->kontroler->data['nazev'] = 'hodnota';

Díky!

 
Odpovědět  +1 14.3.2015 0:06
Avatar
filipfr
Člen
Avatar
filipfr:14.3.2015 15:37

Ahoj, mě nějak uniká smysl té fce extract($this->data);

 
Odpovědět 14.3.2015 15:37
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovědět  +2 14.3.2015 15:53
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
filipfr
Člen
Avatar
Odpovídá na David Čápka
filipfr:14.3.2015 16:23

Díky, jenom, jestli jsem to správně pochopil, tak tahle operace je tam jen proto, abych v šabloně mohl použít "<?= $promenna ?>" místo "
<?= data['promenna'] ?>"

 
Odpovědět 14.3.2015 16:23
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na filipfr
David Čápka:14.3.2015 16:37

Přesně tak.

Odpovědět  +1 14.3.2015 16:37
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
antoninfoltyn:15.3.2015 15:22

Ještě dotaz o_O

Vím jak předám data z 'SmerovacKontro­ler.php' nebo 'NejakyKontro­ler.php' do pohledu. Ale nedaří se mi předat / poslat data z 'SmerovacKontro­ler.php' do 'NejakyKontro­ler.php'.

Teoreticky by mělo fungovat:

V 'Kontroler.php' jsem si vytvořil další proměnnou:

protected $dataProNejakyKontroler;

A po vytvoření dané instance NejakyKontroler.php se z 'SmerovacKontro­ler.php' snažím předat 'nejake-data';

$this->kontroler->dataProNejakyKontroler = 'nejake-data';

Bohužel v 'NejakyKontro­ler.php' se k nim nemohu dostat.

Specificky potřebuji předat další části URL z 'SmerovacKontro­ler.php' příslušnému kontroleru aby s nimi mohl pracovat dál

Díky za nakopnutí. ;)

Editováno 15.3.2015 15:24
 
Odpovědět 15.3.2015 15:22
Avatar
antoninfoltyn:15.3.2015 17:15

Tak už jsem pochopil..

Zasílání dat bylo snad v pořádku ale nedošlo mi že je zasílám až po zavolání metody 'zpracuj()' takže je nemohla zpracovat.

Navíc URL se zasílá přímo při volání metody 'zpracuj()'.

Předchozí dotaz je tedy snad vyřešen, tedy pokud myšlenky v tomto dávají smysl. Díky

 
Odpovědět 15.3.2015 17:15
Avatar
xveslyx
Člen
Avatar
xveslyx:21.8.2015 15:41

Zdravím,

mohu se prosím zeptat, co mám v .htaccess nastavit, aby se při volání základní stránky nezobrazovalo adresa/uvod
Zkrátka když mám www.example.cz tak při tomto řešení je při volání této adresy v adresním řádku ukáže www.example.cz/uvod - protože se volá úvodní kontroler a načítá se úvodní pohled.

Děkuji za rady

 
Odpovědět 21.8.2015 15:41
Avatar
wanispwnz
Člen
Avatar
wanispwnz:4.10.2015 21:02

Díky za článek :)

 
Odpovědět 4.10.2015 21:02
Avatar
Marek Šafránek:6.11.2015 22:55

Učím se jak rozchodit tento systém na produkčním hostingu (endora), ale po nahrání souborů vyskakuje chyba Chyba serveru 500 - index je ve složce xxx.yyy.cz/re­dakcnisystest/web.

Co modifikovat v souborech .htaccess nebo jinde, aby to fungovalo stejně jako na lokálním wampu?

Odpovědět  +1 6.11.2015 22:55
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
Dusan Barnák:25.2.2016 22:36

ahoj
mám otázku mám vymazať zložky v XAMPP defaultně c:/xampp/htdocs ale keď ja používam wamp

čo môžem mazať

Editováno 25.2.2016 22:37
 
Odpovědět 25.2.2016 22:36
Avatar
mkub
Redaktor
Avatar
Odpovídá na Dusan Barnák
mkub:26.2.2016 0:26

a takisto mozes upravit umiestnenie webu v httpd.conf ;) a takisto v nom najdes aj umiestnenie toho htdocs

 
Odpovědět 26.2.2016 0:26
Avatar
Martin Dobiaš:29.2.2016 18:29

Cafte,
Chcel by som sa spýtať. Keď vytváram nový projekt (WEB application) v NetBeans automaticky mi to dáva dalšiu zložku do htdocs s názvom projektu. Tam potom dokážem vytvárať dalšie zložky + vytvárať php subory atď. Ak by som ale napríklad projekt nevytváral ale vytvoril iba tieto tri zložky priamo v htdocs neviem ako tam mam pridať súbory. Robil som to tak že som si inde vytvoril projekt tam to cele spravil a subory iba nakopiroval do týchto zložiek vytvorených v htdocs. Teraz ale samozrejme zas nemožem dať "RUN project". Ako to spraviť?
Ďakujem

 
Odpovědět 29.2.2016 18:29
Avatar
michal.smatlak:1.9.2016 20:53

Zdravím, som začiatočník a potrebujem poradiť ako urobiť tie pekné url. Napríklad mám url www.recension4u.com/index.php?… a namiesto nej chcem url www.recension4u.com/nazov_clanku. Skúšal som to aj tak ako je to v tomto článku a nefungovalo to. Teraz som tam dal toto

RewriteEngine on
# RewriteBase /

RewriteRule ^([a-zA-Z0-9]+)$ index.php?clanok=$1
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?clanok=$1

ale aj tak to nefunguje. Mám problém v kóde? Alebo kde môže byť problém.
Poraďte mi prosím Vás ako to vyriešiť.
Za všetky rady vopred ĎAKUJEM.

 
Odpovědět 1.9.2016 20:53
Avatar
00
Člen
Avatar
00:1.9.2016 21:49
RewriteEngine on
# RewriteBase /

RewriteRule ^/?([^/]+) index.php?clanok=$1

RewriteRule ^/?$ index.php

Píšu z mobilu a zpaměti, tak doufám že bude fungovat. A nevím, zda není to /? zbytečné.

 
Odpovědět 1.9.2016 21:49
Avatar
00
Člen
Avatar
00:1.9.2016 21:55

Edit:

RewriteEngine on
# RewriteBase /
RewriteRule ^/?$ [L] index.php
RewriteRule ^/?([^/]+) index.php?clanok=$1

Píšu z mobilu a zpaměti, tak doufám že bude fungovat. A nevím, zda není to /? zbytečné.

Poslední řádek by měl zprovoznit index. A také nevím, jestli nemá být místo index.php /index.php.

 
Odpovědět 1.9.2016 21:55
Avatar
Odpovídá na 00
michal.smatlak:2.9.2016 7:46

Skúsil som ten kód čo si napísal ale vyhodilo mi to Error 500.

 
Odpovědět 2.9.2016 7:46
Avatar
00
Člen
Avatar
00:2.9.2016 7:51
RewriteEngine on
# RewriteBase /
RewriteRule ^/?$ index.php [L]
RewriteRule ^/?([^/]+) index.php?clanok=$1
 
Odpovědět 2.9.2016 7:51
Avatar
Odpovídá na 00
michal.smatlak:2.9.2016 8:14

Skúsil som to ale v prehliadači mi to vyhodilo toto: Web www.recension4u.com vás presmeroval príliš veľakrát.

Editováno 2.9.2016 8:16
 
Odpovědět 2.9.2016 8:14
Avatar
00
Člen
Avatar
Odpovídá na michal.smatlak
00:2.9.2016 8:48

Mě ne.

 
Odpovědět 2.9.2016 8:48
Avatar
Odpovídá na 00
michal.smatlak:2.9.2016 17:16

A kde by mohol byť problém?

 
Odpovědět 2.9.2016 17:16
Avatar
00
Člen
Avatar
00:3.9.2016 11:11

Zkus v prohlížeči vymazat cache, offline data a podobné, možná to bude tím.

 
Odpovědět 3.9.2016 11:11
Avatar
00
Člen
Avatar
00:3.9.2016 11:20

A je to www.recension4u.com dostupné i pro mě? Klidně vytvoř novou doménu (.tk, 3. řádu, atd.) a tam dej tu upravenou verzi, jestli to tak není.

Omlouvám se, ale nejde mi tlačítko Odpovědět
 
Odpovědět 3.9.2016 11:20
Avatar
pgarsky
Člen
Avatar
pgarsky:19.9.2016 19:04

Proč tam v tom

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

není použité místo if ($pohled) to $this->pohled?

Odpovědět  -1 19.9.2016 19:04
Pokud ti něco jde těžko, znamená to, že jdeš tou správnou cestou...
Avatar
Petr Šauer
Člen
Avatar
Petr Šauer:1.11.2016 20:05

Ahoj, jak schovám příponu .php (.phtml) ?

 
Odpovědět 1.11.2016 20:05
Avatar
Aleš Kováč:19.1.2017 0:19

Ahoj mám docela problém s rozchozením, měl jsem původně wampserver a tam jsem se dostal až k fázi, že po mě řvala databáze, tak jsem si řekl vyskouším xamp server.

Dal jsem to do kořenové složky a původní soubory přesunul a hlásí to toto:
Chyba serveru!

Nastala vnitřní chyba a server nebyl schopen dokončit Váš požadavek. Buď je server přetížen, nebo došlo k chybě v CGI skriptu.
Error 500
localhost
Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28
Kde dělám chybu?

 
Odpovědět 19.1.2017 0:19
Avatar
Fredep
Redaktor
Avatar
Fredep:19.1.2017 21:00

Ahoj,
jen tak teoreticky, nedalo by se použít v .htaccess souboru pouze

ErrorDocument 404 /index.php

místo kompletního RewriteEngine, který v tomto případě dělá to samé? Stránky které neexistují přesměruje na index, kde je zpracuje php. ;) Sice to vypadá divně, ale je to mnohem jednodušší :D

 
Odpovědět 19.1.2017 21:00
Avatar
Ondřej Langr (andysekcze):26.1.2017 20:19

Ahoj, dá se nějak skloubit několik rozdílných autoloaderů resp. použít několik zároveň? Např. mám složku 'vendor', ve které mám různé SDK s jinou adresářovou strukturou(Má adresářová struktura je téměř totožná s touhle - připadá mi jednoduchá a skvělá, ale můžu se mýlit). Díval jsem se na Google po nějakým rekurzivním autoloadingu, ale bohužel mi nic nefungovalo (Hlavně tam padaly hlášky o tom, že nemůžu redefinovat třidu XYZ.php apod. ) :-(

Odpovědět  +1 26.1.2017 20:19
I have a charger. I have Note 7. Umh I haven't Note7.
Avatar
michal.smatlak:18.3.2017 11:43

Zdravím, chcem sa spýtať ako v NetBeans vytvorím súbor index.php bez vytvorenia nového projektu, tak ako to je urobené na začiatku tohoto článku. Za všetky rady vopred ďakujem.

 
Odpovědět 18.3.2017 11:43
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na michal.smatlak
Jan Lupčík:18.3.2017 13:07

New empty PHP file a pojmenuješ ho index, ne? :D

Odpovědět 18.3.2017 13:07
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
michal.smatlak:18.3.2017 15:01

Tento postup ktorý si napísal funguje až keď máš vytvorený nejaký projekt, nie? Ale ja potrebujem vytvoriť súbor mimo projektu. Jednoducho potrebujem súbor ktorý bude v koreňovej zložke htdocs a nie v podzložke projektu.

 
Odpovědět 18.3.2017 15:01
Avatar
Jan Lupčík
Šéfredaktor
Avatar
Odpovídá na michal.smatlak
Jan Lupčík:18.3.2017 21:05

Tak to neuděláš v Netbeans, ale normálně ve Windows průzkumníku. Necháš si zobrazit přípony souborů, vytvoříš nový textový soubor a pojmenuješ ho index.php.

Odpovědět  +1 18.3.2017 21:05
TruckersMP vývojář
Avatar
Petr Langer
Člen
Avatar
Petr Langer:20.8.2017 17:50

Když si v kořenovém adresáři vytvořím složku scripts a v ní budu mít nějaký script, který pak budu v hlavičce html stránky načítat (...src="../scrip­ts/script.js"). Jak udělat aby to server bral jako složku a nepřesměrovával požadavek na kontroler?

 
Odpovědět 20.8.2017 17:50
Avatar
Mr.Suit
Člen
Avatar
Mr.Suit:6.1.2018 18:40

Mozna by stalo za zminku uvest zde composer jako mozny zpusob autoloadingu.

  • doporucil bych na praci a vyvoj obecne naucit se s linuxem a zvolit nejakou vhodnou distribuci napr debian. Zde se da nasledovne virtualizovat windows pro vase oblibene programy typu photoshop, visual basic a pod vse co je psane pro win.
  • Jinak dobry clanek. Zrovna ctu a libi ... :) .
  • Jen jedna otazka: prakticky ta adresarova struktura takto asi vypadat nebude, tak jak konci dilem 9. dal jsem se nedival, zatim jsem nekoupil premiove clanky, ale myslim si, ze by bylo dobre vedet kam prijdou pohledy jakozto asi do public_html? nebo alespon ty styly.

Rad bych to pochopil v praktickem hledisku, jak je to best practice.

Diky Karel.

Odpovědět 6.1.2018 18:40
/Best Practice/Work/Life/brain.conf
Avatar
Vaclav Hrouda
Redaktor
Avatar
Vaclav Hrouda:26.3.2018 22:18

Zdravím, když zadám adresu example.com/pohledy (nebo název nějaké jiné složky) vyhodí to error 403. Nevíte jak tomu zabránit a zajistit aby se spustil teoretický PohledyKontro­ler.php

 
Odpovědět 26.3.2018 22:18
Avatar
ludek.balvin
Člen
Avatar
ludek.balvin:28. února 18:17

Ahoj,
jak postupovat při produkci na subdoménu? Např. pojektA.domena.cz? Na localu dle tohoto článku vše OK, ale na produkci to funguje jen v kořenové složce... Ať googlim jak googlim, tak nic nemohu najít :-(

Jinka luxusní tutoriál - díky moc!!!!

Luděk

 
Odpovědět 28. února 18:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na ludek.balvin
David Čápka:28. února 18:24

Subdoména by na to neměla mít vliv, to je to samé jako když napíšeš www, jde o složku. Možná máš nějak divně nastavený hosting.

Odpovědět 28. února 18:24
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Odpovídá na ludek.balvin
Michal Šmahel:28. února 18:59

Ahoj, když nahraješ na subdoménu statickou HTML stránku, funguje nebo ne?

Odpovědět 28. února 18:59
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
ludek.balvin
Člen
Avatar
ludek.balvin:1. března 1:32

Právě, že funguje vše. Tedy vše krom této architektury MVC. :-(

 
Odpovědět 1. března 1:32
Avatar
ludek.balvin
Člen
Avatar
Odpovídá na Michal Šmahel
ludek.balvin:1. března 10:24

Davide,
prosím, jak bych měl správně popsat problém na podpoře svého hostingu? Pro info je to EBOLA.cz.
díky moc

 
Odpovědět 1. března 10:24
Avatar
Alma Mater
Člen
Avatar
Alma Mater:6. června 17:28

Vedel by niekto napisat v.htacces presmerovanie, aby cely system fungoval z podzložky cms
napr.z http://localhost/cms/ ...bez toho aby sa menili url v systeme minimalne?

Odpovědět 6. června 17:28
Kopírovanie je forma zdieľania informácii, bez autorských práv sa informácie nezadržiavajú - šíria sa tam kde treba..
Avatar
Alma Mater
Člen
Avatar
Odpovídá na Alma Mater
Alma Mater:14. června 15:44

Vyriesene v lekcii c.5 v komentaroch....

Odpovědět 14. června 15:44
Kopírovanie je forma zdieľania informácii, bez autorských práv sa informácie nezadržiavajú - šíria sa tam kde treba..
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 106 zpráv z 106.