Первоначально была задумка сделать роутер, но как-то так незаметно получилось что в Foo у меня оказалось почти всё приложение ))
Задумка была такая:
сайт.ру/news/ - страница со списком новостей
сайт.ру/news/page/2 - пагинатор, вторая страница со списком новостей
сайт.ру/news/14/duma-prynyala-zakon - отдельная страница новости где 14 это её id а последний сегмент чисто для поисковиков
// Запрошенный URL
$part = explode('/', $_SERVER['REQUEST_URI']);
// Запускаем обработчик
$foo = new Foo();
if(!isset($part[2])){ $part[2] = '';}
if(!isset($part[3])){ $part[3] = '';}
$foo->check($part[1],$part[2],$part[3]);
// Обработчик Foo находится в другом файле class.Foo.php
class Foo
{
function check($catalog, $part, $three)
{
// Назначим разделам сайта имена методов-обработчиков
switch ($catalog) {
case 'news': $name = 'news'; break;
case 'art': $name = 'art'; break;
}
// Если URI содержит только каталог, то это страница со списком материалов
if(!isset($part) || empty($part)){
$name = $name.'_main';
}
// Вызываем метод обработчик этого раздела сайта
$this->$name($part, $three);
}
function news($part, $three){
echo "Это страница новости с id=$three<br>";
}
function art($part, $three){
echo "Это страница статьи с id=$three<br>";
}
function news_main($part, $three){
echo "Это страница со списком новостей<br>";
}
function art_main($part, $three){
echo "Это страница со списком статей<br>";
}
}
Вопросы:
1. Допустим explode разбивку URI можно вынести в конфиг. Куда правильно вынести проверку существования всех частей адреса (т.е. $part[2] и $part[3]) в index.php ей явно не дело болтаться.
2. Правильно ли я понял что метод check сейчас выполняет функцию роутера? И что бы он стал нормальным роутером его надо вынести в другой класс, что бы он не был связан с классом Foo?
Любые комментарии приветствуются...