[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оценка и улучшение кода
Страницы: 1, 2
lockon
Прошу сильно не пинать но в качесте учебно-профилактических методов указу применять можно. :rolleyes: Задача довести код безопастного применения, учтите это мой первый написаный класс, так что прошу советов а не критики.


<?php
class Router
{

var $module = 'not_found';
var $action = 'main';
var $params = array();

public function GetRoute($routes){

$this->routes = $routes;

foreach ($routes as $map){
$url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
if (preg_match($map['pattern'], $url_path, $matches)){
array_shift($matches);
foreach ($matches as $index => $value){
$this->params[$map['aliases'][$index]] = $value;
}
$this->module = $map['class'];
$this->action = $map['method'];
break;
}
}
}


public function AddUrl($modul, $bclass, $method, $aliases){

$this->modul = $modul;
$this->bclass = $bclass;
$this->method = $method;
$this->aliases = $aliases;

$slash = "/";

$count = count($aliases);
$i = 1;
foreach($aliases as $list=>$iner){
unset($iner);
$iner = '([a-z0-9_\-]+)';
if($i == $count){
$cresh[] = ($iner);
}else{
$cresh[] = '([a-z0-9_\-]+)'.$slash.'';
}
$i++;
}

$pattern = '~^/'.$modul.'/';
foreach($cresh as $cresh){
$pattern .= $cresh;
}
$pattern .= '\.html$~';

$maps[0]['pattern'] = ''.$pattern.'';
$maps[0]['class'] = $bclass;
$maps[0]['method'] = $method;
$maps[0]['aliases'] = $aliases;

return $this->GetRoute($maps);
}
}

?>



<?php
$obj = new Router;

$obj->AddUrl('news', 'News', 'newsTopick', array('category', 'name_category', 'name_sub_category'));

$obj->AddUrl('forum', 'Forum', 'forumTopick', array('category', 'name_category', 'name_sub_category', 'categoty_id'));

//вывод
$module = $obj->module;
$action = $obj->action;
$params = $obj->params;

//результат
echo "\$module: $module\r\n";
echo "\$action: $action\r\n";
echo "\$params:\r\n";
print_r($params);

//ОПП
$control = new $module();
$control->$action($params);
?>


При переходе по ссылке site.ru/news/php/html/css.html

Получаем

$module: News $action: newsTopick $params: Array ( [category] => php [name_category] => html [name_sub_category] => css )

Применил в данном коде рекурсивный метод подсчета элементов в массиве и автоматическую генерацию регулярно выражения '~^/news/([a-z0-9_\-]+)/([a-z0-9_\-]+)/([a-z0-9_\-]+)/([a-z0-9_\-]+)\.html$~' взависимости от общего числа элементов массива. Тоесть если один элемент то '~^/news/([a-z0-9_\-]+)\.html$~ если два /news/([a-z0-9_\-]+)/([a-z0-9_\-]+)\.html$~ и так далее.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.