W swoim malym frameworku chciałem uzyc ładnych linkow jak www.strona/controler/action/varible/value itd.
zgodnie z http://nospor.pl/ladne-urle.html
utworzyłem .htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1 [L]
czyli wszystko przekierowuje na index a tam parsuje:
Kod
static public function getUrlParametrs() {
if (empty($_SERVER['PATH_INFO'])) { //pusta ścieżka
return true;
}
$pathInfo = trim($_SERVER['PATH_INFO'], '/'); //usuwamy znak / z końca
$arr = explode('/', $pathInfo); //rozbijamy naszą ścieżkę na podstawie /
$count = count($arr);
//pierwsze dwa elementy to moduł i akcja
$_GET['_controler'] = $arr[0] ? $arr[0]:null;
$_GET['_action'] = isset($arr[1]) ? $arr[1] : null; //tu małe zabezpieczenie, gdyby ktoś zapomniał podać akcji
//następne elementy to nazwy parametru i parametr i tak co dwa
for ($i = 2; $i < $count; $i += 2) {
$_n = $arr[$i]; //nazwa parametru
$_v = isset($arr[$i + 1]) ? $arr[$i + 1] : ''; //wartość parametru
$_GET[$_n] = $_v;
}
}
if (empty($_SERVER['PATH_INFO'])) { //pusta ścieżka
return true;
}
$pathInfo = trim($_SERVER['PATH_INFO'], '/'); //usuwamy znak / z końca
$arr = explode('/', $pathInfo); //rozbijamy naszą ścieżkę na podstawie /
$count = count($arr);
//pierwsze dwa elementy to moduł i akcja
$_GET['_controler'] = $arr[0] ? $arr[0]:null;
$_GET['_action'] = isset($arr[1]) ? $arr[1] : null; //tu małe zabezpieczenie, gdyby ktoś zapomniał podać akcji
//następne elementy to nazwy parametru i parametr i tak co dwa
for ($i = 2; $i < $count; $i += 2) {
$_n = $arr[$i]; //nazwa parametru
$_v = isset($arr[$i + 1]) ? $arr[$i + 1] : ''; //wartość parametru
$_GET[$_n] = $_v;
}
}
następnie w index.php wywoluje te getUrlParametrs() by uzupelnila mi GET i dalej działam na $_GET tak jak to było zanim uzywalem ladnych linkow
Kod
Url::getUrlParametrs();
$controler = $_GET['_controler'] ? $_GET['_controler'] : _DEFAULT_CONTROLLER;
$action = $_GET['_action'];
$parametrs = array();
$c = new $controler();
if (isset($action))
if (method_exists($controler, $action)) {
foreach ($_GET as $key => $value) {
if (($key != '_controler') && ($key != '_action'))
$parametrs[$key] = $value;
}
$GLOBALS['trace']->saveTrace(array('what' => 'controllers', 'val' => $controler . '->' . $action));
$c->$action($parametrs);
} else
page_404('Nie znana akcja!');
else {
try {
$c->index();
} catch (Exception $ex) {
print_r($e);
die;
}
}
$controler = $_GET['_controler'] ? $_GET['_controler'] : _DEFAULT_CONTROLLER;
$action = $_GET['_action'];
$parametrs = array();
$c = new $controler();
if (isset($action))
if (method_exists($controler, $action)) {
foreach ($_GET as $key => $value) {
if (($key != '_controler') && ($key != '_action'))
$parametrs[$key] = $value;
}
$GLOBALS['trace']->saveTrace(array('what' => 'controllers', 'val' => $controler . '->' . $action));
$c->$action($parametrs);
} else
page_404('Nie znana akcja!');
else {
try {
$c->index();
} catch (Exception $ex) {
print_r($e);
die;
}
}
controler:
Kod
class Home extends ControllerCore {
public function __construct() {
parent::__construct();
}
public function index() {
$loram = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
$this->tpl->assign('page', $loram);
$this->display('home/home');
public function __construct() {
parent::__construct();
}
public function index() {
$loram = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
$this->tpl->assign('page', $loram);
$this->display('home/home');
i teraz tak. Szablony smarty się uzupelniaja i pojawia się strona ale bez styli, nie widzi ich , jakby nie były załadowane! W zrodle strony sa jak najbardziej ale na ekranie nie sformatowany stylami tekst
. Jak tylko usune htacces i zakomentuje funkcje od dekodowania $_SERVER['PATH_INFO'], czyli działa po staremu index.php?_controler=home&action= itd...wszytsko działa jak należy!
Wie ktoś może jak to rozwiazac?
Z góry dziekuje