Страница 1 из 1
[PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 4:23:01
Darwent
Не могу найти ошибку в работе с HTTP::Router, поставил конфиг который написан в документации
http://search.cpan.org/~masaki/HTTP-Rou ... /Router.pm
Код: Выделить всё
use HTTP::Router;
use HTTP::Router::Route;
use HTTP::Router::Match;
use HTTP::Router::Debug;
use HTTP::Router::Declare;
my $router = HTTP::Router->new;
my $route = HTTP::Router::Route->new(
path => '/',
conditions => { method => 'GET' },
params => { controller => 'Root', action => 'index' },
);
$router->add_route($route);
# GET /
my $match = $router->match('/see/');
$match->params; # { controller => 'Root', action => 'index' }
$match->uri_for; # '/'
выдаёт ошибку Can't call method "params" on an undefined value at
Сервер у меня свой на FreeBSD модули ставил из портов, вроде всё правильно собралось без ошибок, в чём может быть проблема?
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 7:32:11
thefree
полностью ошибку скопируйте
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 10:13:48
Darwent
Код: Выделить всё
Software error:
Can't call method "params" on an undefined value at /pub/www/homepage/Домен.ru/www/index.pl line 170.
For help, please send mail to the webmaster (sergey@test.ru), giving this error message and the time and date of the error.
А вот она строка 170
Код: Выделить всё
$match->params; # { controller => 'Root', action => 'index' }
Из небольших соображений убрал домен
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 10:26:34
Darwent
$VAR1 = bless( { 'params' => { 'controller' => 'Root', 'action' => 'index' }, 'path' => '/', 'conditions' => { 'method' => 'GET' } }, 'HTTP::Router::Route' );
пробовал ставить
Всё равно та же ошибка
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 19:21:48
ProFTP
Код: Выделить всё
use HTTP::Router;
use HTTP::Router::Route;
use HTTP::Router::Match;
use HTTP::Router::Debug;
use HTTP::Router::Declare;
my $router = HTTP::Router->new;
my $route = HTTP::Router::Route->new(
path => '/',
conditions => { method => 'GET' },
params => { controller => 'Root', action => 'index' },
);
$router->add_route($route);
# GET /
use Data::Dumper;
print Dumper($router);
print "\n\n --------------- \n\n":
print Dumper($match);
my $match = $router->match('/see/');
$match->params; # { controller => 'Root', action => 'index' }
$match->uri_for; # '/'
посмотреть надо есть ли метод...
скорее всего вы что-то напутали...
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-23 23:01:28
Darwent
Я всё делал по документации метод в пакете есть
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-24 0:18:36
ProFTP
Darwent писал(а):
$VAR1 = bless( { 'params' => { 'controller' => 'Root', 'action' => 'index' }, 'path' => '/', 'conditions' => { 'method' => 'GET' } }, 'HTTP::Router::Route' );
Код: Выделить всё
my $match = $router->match('/see/');
$match->params; # { controller => 'Root', action => 'index' }
разницу видно?
что в объекте $route есть, а в $route
r ( $match ) скорее всего нету...
попробуйте так:
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-24 0:27:52
ProFTP
Darwent писал(а):
Всё равно та же ошибка
потому что &match скорее всего возвращает не объект, а какие-то просто данные...
$match это объект?
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-02-24 16:34:40
perlmonks.org.ru
use Any::Moose;
use Any::Moose 'X::AttributeHelpers';
use Hash::AsObject;
use List::MoreUtils 'part';
use HTTP::Router::Route;
НА мус запилена эта либа - так что проверь валидно ли у тебя установлены все эти модули.
По идее идет наследование класса в match, так что $match должен вызывать методы $route.
Re: [PERL] помогите найти ошибку в работе с HTTP::Router
Добавлено: 2010-03-04 11:46:19
ProFTP
Код: Выделить всё
sub match {
my $self = shift;
my $req = blessed $_[0] ? $_[0] : Hash::AsObject->new(path => $_[0], %{ $_[1] || {} });
if ($self->use_inline_match) {
return $self->inline_matcher->($req);
}
else {
for my $route ($self->routes) {
my $match = $route->match($req) or next;
return $match;
}
return;
}
}
если я ничего не перепутал то вот этот match, и он может возвратить не объект... тут кстате, нету "Обработки исключений" ошибки могут быть разные