Страница 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

Код: Выделить всё

print Dumper $route;
$VAR1 = bless( { 'params' => { 'controller' => 'Root', 'action' => 'index' }, 'path' => '/', 'conditions' => { 'method' => 'GET' } }, 'HTTP::Router::Route' );

пробовал ставить

Код: Выделить всё

my $match = $router->match('/');
Всё равно та же ошибка

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 писал(а):

Код: Выделить всё

print Dumper $route;
$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 есть, а в $router ( $match ) скорее всего нету...

попробуйте так:

Код: Выделить всё

 $route->params;

Re: [PERL] помогите найти ошибку в работе с HTTP::Router

Добавлено: 2010-02-24 0:27:52
ProFTP
Darwent писал(а):

Код: Выделить всё

my $match = $router->match('/');
Всё равно та же ошибка
потому что &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, и он может возвратить не объект... тут кстате, нету "Обработки исключений" ошибки могут быть разные