My favorites | Sign in
Project Home Wiki Source
Checkout   Browse   Changes    
 
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
# URI Роутинг

Как правило есть соответствие один-к-одному между строкой URL и соответствующим контроллером/методом. Сегменты URL обычно формируются по этому шаблону:

`www.your-site.com/<dfn>class</dfn>/<samp>function</samp>/<var>id</var>/`

Однако, в некоторых случаях, вы можете перенаправить адрес так, чтобы строка вида контроллер/метод указывала на совершенно другие места в приложении.

Например, вы хотите чтобы ваши адреса соответствовали этому шаблону:

www.your-site.com/product/1/
www.your-site.com/product/2/
www.your-site.com/product/3/
www.your-site.com/product/4/

Как правило второй сегмент адресной строки резервируется для имени функции, но в примере выше мы хотим использовать вместо него ID.
Чтобы сделать это, необходимо перенаправить адрес на обработчик URL CodeIgniter.

# Установка правил собственной маршрутизации

Правила маршрутизации объявляются в вашем файле <var>application/config/routes.php</var>. В нем вы увидите массив с названием <dfn>$route</dfn>, при помощи которого вы сможете переопределить адреса. Роуты могут быть определены двумя способами: <dfn>маской</dfn> или <dfn>Регулярными Выражениями</dfn>.

# Маски

Обычная маска маршрута может выглядеть примерно так:

`$route['product/:num'] = "catalog/product_lookup";`

В роуте ключ массива содержит URI в котором будет искаться соответствие, а в значении содержится путь, куда необходимо переадресовать обработчик. Если в приведенном выше примере слово «product» находится в первом сегменте, а номер во втором сегменте, то вместо этого адреса будет произведено обращение к классу «catalog» и методу «product_lookup».

Вы можете использовать буквы или два типа заполнителя:
:num
:any

__:num__ будет соответствовать сегмент, содержащий только цифры.
__:any__ будет соответствовать сегмент с любыми символами.

[important]__Замечание:__ Роуты будут работать в том порядке, в котором они определены. Ранее определенные всегда будут преобладать над определенными позже.

# Примеры

Вот несколько примеров маршрутизации:

`$route['journals'] = "blogs";`

URL содержащий слово «journals» в первом сегменте будет переадресован к классу «blogs».

`$route['blog/joe'] = "blogs/users/34";`

URL содержащий сегменты «blog/joe» будет переадресован к классу «blogs» и методу «users». ID будет установлен в значение «34».

`$route['product/:any'] = "catalog/product_lookup";`

URL со словом «product» в первом сегменте, и любым другим во втором будет перенаправлен к классу «catalog», методу «product_lookup».

[important]__Важно:__ Не используйте начинающих/конечных слешей.

# Регулярные Выражения

При желании вы можете использовать Регулярные Выражения для определения правил роутинга. Допускается любое правильное регулярное выражение, как и обратные ссылки.

[important]__Замечание:__ Если вы используете обратные ссылки, то должны пользоваться синтаксисом доллара и затем двойной бэкслеш.

Типичный RegEx роут должен выглядеть так:

`$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";`

Например, при запросе адреса <dfn>products/shirts/123</dfn> будет вызван контроллер <dfn>shirts</dfn> и метод <dfn>id_123</dfn> в нем.

Вы, также, можете одновременно использовать Маски и Регулярные Выражения.

# Зарезервированные роуты

Есть два зарезервированных роута:

`$route['default_controller'] = 'welcome';`

Этот роут показывает что необходимо загружать, когда пользователь ввел корневой адрес, т.е. прямо не показал к какому контроллеру обращаться. В этом примере будет загружен класс «welcome». Вам рекомендуется всегда указывать этот роут, т.к. страницы 404 будут, по умолчанию, ссылаться на него.

`$route['scaffolding_trigger'] = 'scaffolding';`

Здесь вам предлагается установить секретное слово, при наличии которого в URL будет активироваться возможность скаффолдинга. Пожалуйста прочтите главу [Скаффолдинг](scaffolding.html) для выяснения подробностей.

[important]__Важно:__ Зарезервированные роуты должны быть объявлены раньше роутов с Масками или Регулярными Выражениями.

Change log

r10 by isaykin on Oct 28, 2009   Diff
[No log message]
Go to: 
Project members, sign in to write a code review

Older revisions

r9 by isaykin on Oct 28, 2009   Diff
[No log message]
r8 by isaykin on Oct 28, 2009   Diff
[No log message]
r7 by isaykin on Oct 28, 2009   Diff
[No log message]
All revisions of this file

File info

Size: 6487 bytes, 84 lines
Powered by Google Project Hosting