все дело в правильной настройке .htaccess посан.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
Одна точка входа index.
php разумеется.
а url разбиваю так:
<?php
defined('MEX') or die("Нет доступа");
class route extends framework
{
static $id;
public static function delegate()
{
$route = empty($_GET['route']) ? '' : $_GET['route'];
$exp = explode('/', $route);
self::$id = isset($exp[2]) ? $exp[2] : null;
if($exp[0] == '')
{
$file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_index.php';
}
else
{
$file = $_SERVER['DOCUMENT_ROOT'] .'/controllers/controller_'.$exp[0].'.php';
}
if(!file_exists($file))
{
engine :: away();
}
include_once $file;
$class = (empty($exp[0]) or !class_exists($exp[0])) ? 'class_index' : $exp[0];
$controller = new $class;
$method = (empty($exp[1]) or !method_exists($controller, $exp[1])) ? 'index' : $exp[1];
$controller -> $method();
}
}
?>
набираем site.ru/category/news.html, будет создан экземпляр класса category и его метод news...
а вот простой контроллер:
<?php
defined('MEX') or die("Нет доступа");
class user extends route
{
public function index()
{
$data = array();
if(isset($_POST['data']))
{
$data['result'] = $_POST['data'];
}
View::Factory('user', 'Вход', $data);
}
public function add()
{
$data = array();
if(isset($_POST['data']))
{
mysql::query("INSERT INTO `user` VALUES (null, '". $_POST['data'] ."')");
}
View::Factory('user_new', 'Новый юзер', $data);
}
public function show()
{
$data = array();
if(isset(parent::$id))
{
$data['user_name'] = mysql :: select("SELECT `login` FROM `user` WHERE `id` = '". parent::$id ."'");
}
View::Factory('user_show', 'Просмотр ', $data);
}
}
при наборе site.ru/user
заработает метод index, а если site.ru/user/show/1 , то выведется логин юзера с id=1. если набрать site.ru/user/blabla то заработает метод index, т.к. blabla метода нет.