Mercurial > pub > Impl
comparison Lib/IMPL/Web/QueryHandler/UrlController.pm @ 110:c13a215508ca
Refactoring,
ControllerUnit
author | wizard |
---|---|
date | Mon, 17 May 2010 17:42:27 +0400 |
parents | Lib/IMPL/Web/QueryHandler/SecureCall.pm@964587c5183c |
children | 5a9f64890c31 |
comparison
equal
deleted
inserted
replaced
109:ddf0f037d460 | 110:c13a215508ca |
---|---|
1 package IMPL::Web::QueryHandler::UrlController; | |
2 use strict; | |
3 use base qw(IMPL::Web::QueryHandler); | |
4 | |
5 use IMPL::Class::Property; | |
6 use IMPL::Exception; | |
7 use Carp; | |
8 | |
9 BEGIN { | |
10 public property namespace => prop_all; | |
11 } | |
12 | |
13 __PACKAGE__->PassThroughArgs; | |
14 | |
15 sub Process { | |
16 my ($this,$action,$nextHandler) = @_; | |
17 | |
18 my $namespace = $this->namespace || $action->application->type; | |
19 | |
20 my @target = grep $_, split /\//, ($ENV{PATH_INFO} || '') or die new IMPL::Exception("No target specified"); | |
21 | |
22 my $method = pop @target; | |
23 $method =~ s/\.\w+$//; | |
24 | |
25 my $module = join '::',$namespace,@target; | |
26 | |
27 eval "require $module; 1;" unless $INC{$module}; | |
28 carp $@ if $@; | |
29 | |
30 if(UNIVERSAL::can($module,'InvokeAction')) { | |
31 $module->InvokeAction($method,$action); | |
32 } else { | |
33 die new IMPL::InvalidOperationException("Failed to invoke action",$ENV{PATH_INFO},$module,$method); | |
34 } | |
35 } | |
36 | |
37 1; | |
38 | |
39 __END__ | |
40 | |
41 =pod | |
42 | |
43 =head1 NAME | |
44 | |
45 C<IMPL::Web::QueryHandler::UrlController> - вызов метода на основе <url> запроса. | |
46 | |
47 =head1 DESCRIPTION | |
48 | |
49 Использует переменную C<$ENV{PATH_INFO}> для получения имени и метода модуля. | |
50 | |
51 =cut |