Таблица маршрутизации class HttpRouterTable class ExampleHttpApplicati

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/**
* Таблица маршрутизации
*/
class HttpRouterTable {
}
class ExampleHttpApplication extends HttpApplication {
function __newExampleHttpRouter() {
return new ExampleHttpRouter();
}
function __newHttpRouterTable() {
$object = new HttpRouterTable();
// Можно так
$object->addRouter($this->__newExampleHttpRouter());
// Либо так
$object->addRouter(
array('ExampleController', 'actionExample'),
'^/tmp/([0-9]+)_(as|sd).php$', // маршрут
'/tmp/($1)_($2).php', // для обратного преобразования
array('$1', '$2') // параметры
);
return $object;
}
/**
* HttpApplication
* Процесс работы приложения.
*
*/
function process() {
$query_string = $this->HttpRequest->getQueryString();
$route = $this->HttpRouterTable->find($query_string);
// ... Создать объект контроллера, выполнить действие
}
}
class ExampleHttpRouter extends HttpRouter {
function __construct(){
// имя контроллера
$this->_setName('ExampleController');
$this->addRoute(
'actionExample', // имя действия-метода
'^/tmp/([0-9]+)_(as|sd).php$', // маршрут
'/tmp/($1)_($2).php', // для обратного преобразования
array('$1', '$2') // параметры
);
}
}
class ExampleController extends HttpController {
function __construct(){
// Объявить имя данного контроллера, __CLASS__
$this->_setName('ExampleController');
}
/**
* Действие контроллера.
*/
function actionExample($id) {
echo '<a href = "', $this->buildRoute('actionExample', array($id)), '">ссылка</a>';
echo '<a href = "', $this->buildRoute(array('ExampleController', 'actionExample'), array($id)), '">ссылка</a>';
}
/**
* HttpController
* Возращает маршрут, типа ссылку...
*/
function buildRoute($action, $params = array()){
if(is_array($action)){
$controller_name = $action[0]; // [0] - имя контроллера
$method_name = $action[1]; // [1] - имя метода
} else {
// получить имя данного контроллера
$controller_name = $this->_getName(); // $this->_name - имя данного контроллера
$method_name = $action; // $action - имя метода
}
return $this->HttpRouterTable->buildRoute(array($controller_name, $method_name), $params);
}
}