Частичный перевод CGI::Application / More Application Methods. Вторая из четырех частей перевода. Остальные будут опубликованы позднее.
Примеры кода - авторские.
- delete()
- dump()
- dump_html()
- error_mode()
- get_current_runmode()
- header_add()
- header_type()
- mode_param()
- prerun_mode()
delete()
|
1 |
$self->delete('step'); |
Метод delete() удаляет установленный с помощью param() параметр. Метод действует аналогично методу delete() модуля CGI.pm .
dump()
|
1 |
print STDERR $self->dump(); |
Результат:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Current Run mode: 'on_get_result' Query Parameters: day => '19' month => '02' nowyear => '2010' step => 'on_get_result' Query Environment: CHARSET => 'windows-1251' CHARSET_DETERMINED_BY => 'AcceptCharset' CHARSET_HTTP_METHOD => 'http://' CHARSET_REFERER => 'http://aninatalie/cgi-bin/app.cgi' ... |
Метод dump() полезен при отладке программ. Возвращает информацию об окружении и параметрах запроса. Возвращаемая информация отформатирована для удобства восприятия.
dump_html()
|
1 |
print STDERR $self->dump_html(); |
Тоже самое, что и $self->dump() , но результаты выполнения возвращаются в формате html. Результат выполнения функции можно отсылать на вывод браузеру.
|
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 |
<p>Current Run-mode: '<strong>on_get_result</strong>'</p> <p>Query Parameters:</p> <ul> <li><strong>step</strong></li> <ul> <li>on_get_result</li> </ul> <li><strong>nowyear</strong></li> <ul> <li>2010</li> </ul> <li><strong>month</strong></li> <ul> <li>02</li> </ul> <li><strong>day</strong></li> <ul> <li>19</li> </ul> </ul><p>Query Environment:</p> <ol> <li> CHARSET => '<strong>windows-1251</strong>'</li> <li> CHARSET_DETERMINED_BY => '<strong>AcceptCharset</strong>'</li> ... |
error_mode()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sub setup { my $self = shift; $self->error_mode('on_error'); ... } sub on_error { return '<h1>Ошибочка вышла</h1>' } sub on_start { my $self = shift; die; # вот тут-то и будет вызываться on_error } |
Метод error_mode() назначает специальный режим для ситуаций, когда неожиданно умирает выполняющийся режим.
Метод позволяет перед завершением работы вывести специальную страницу, список ошибок или сделать записи в логи.
get_current_runmode()
|
1 2 |
my $step = $self->get_current_runmode(); # в данном случае, переменная содержала "on_start". |
Метод get_current_runmode() возвращает название режима приложения, который реализуется в текущий момент времени. Если метод вызывается слишком рано, и процесс выполнения приложения еще не дошел до момента определенения режима - функция вернет undef.
header_add()
|
1 2 3 |
$self->header_add(-type => 'image/gif'); # браузер отобразил ошибку: Изображение <app.cgi> не может быть показано, # так как содержит ошибки. В реальности же передавался html-документ |
Метод header_add() используется для добавления / изменения параметров исходящих заголовков запросов. Все передаваемые параметры в конечном счете будут переданы методу header() модуля CGI.pm. Данный метод удобно использовать для работы с Cookies.
header_props()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
sub on_set_cookies { my $self = shift; my $query = $self->query(); my $tt_params = {}; my $auth_cookie = $query->cookie( -name=>'alisa', -value=>'pass', -expires=>'-1h', -path=>'/cgi', -domain=>'.aninatalie.ru', ); $self->header_props(-cookie=>[$auth_cookie]); my %headers = $self->header_props(); $tt_params->{'header_props'} = \%headers; return $self->tt_process('template2.tt', $tt_params); } |
Метод header_props() устанавливает HTTP заголовки . Все установленные параметры будут переданы на выполнение методам header() и redirect() модуля CGI.pm.
При добавлении заголовков через метод header_props() надо учитывать, что он обнулит все заголовки, которые были установлены ранее и установит свои. Если требуется добавить заголовки к уже существующим - следует использовать header_add() .
Если выполнить header_props() без параметров, он вернет хэш массивов - список всех заголовков, которые запланировано передать клиенту.
header_type()
|
1 2 3 4 5 6 |
sub on_start { my $self = shift; $self->header_type('redirect'); $self->header_props(-url=> "http://aninatalie.ru" ); } |
С помощью метода header_type() можно задать заголовки для перенаправления запроса на другой URL или указать, чтоб фреймворк не возвращал серверу вообще никаких заголовков.
|
1 2 3 |
$self->header_type('none'); # в ответе фреймворк не вернет вообще никаких заголовков, и # сервер назначит для использования тип запроса по-умолчанию - text/plane |
mode_param()
Данный метод вызывается из метода setup() и предназначен для вмешательства в процесс определения режима, в котором будет выполняться приложение.
Есть несколько вариантов использования mode_param() .
1) Методу передается название параметра, значение которого будет определять
режим приложения.
|
1 |
$self->mode_param('step'); |
2) Методу mode_param() передается ссылка на подпрограмму, которая определяет режим
по одной ей известным критериям, и возвращает название запускаемого режима.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
sub setup { my $self = shift; $self->mode_param(\&get_mode); ... } sub get_mode { my $self = shift; my $q = $self->query(); my $step = $q->param('step'); return 'on_get_result' if $step eq 'on_get_result'; return 'on_start'; } |
prerun_mode()
|
1 2 3 4 5 6 7 |
sub cgiapp_prerun { my $self = shift; ... unless ($confirm_flag) { $self->prerun_mode('on_start'); } } |
prerun_mode() - метод, предназначенный для использования только в рамках cgiapp_prerun(). Позволяет в последний момент переназначить обработчик режима, который будет запущен сразу после выполнения cgiapp_prerun().