Perl Mojolicious Under

时间:2017-03-31 13:18:40

标签: perl mojolicious

为了在这个mojolicious应用程序中正确路由输入信息,我正在使用“under”功能。为什么这段代码不起作用,但第二块中的代码用于从数据库中实际删除所选项目。

 my $r_hostservices = $r->
        under('/hosts_services:host_services_id')->
        to('hosts_services#hosts_services');

 $r_hostservices->
        delete(':hosts_services_id')->
        to('hosts#hosts_services_deletion')->
        name('hosts_services_deletion');

第二个(工作)块如下

 $r->delete('/hosts_services/:hosts_services_id')->
        to('hosts#hosts_services_deletion')->
        name('hosts_services_deletion');

1 个答案:

答案 0 :(得分:1)

package a;
use Mojo::Base 'Mojolicious';

# This method will run once at server start
sub startup {
  my $self = shift;

  # Load configuration from hash returned by config file
  my $config = $self->plugin('Config');

  # Configure the application
  $self->secrets($config->{secrets});

  # Router
  my $r = $self->routes;

  my $ur = $r->under('/foo/:bar');

  $ur->delete()->to('example#two');
  $ur->any()->to('example#one');
}

1;

您始终可以通过以下方式列出所有已定义的路由:

script/a routes

此功能对于在这种情况下进行调试非常有用。您可以在Mojolicious::Commands上阅读有关Mojolicious CLI的更多信息。

以下是带有上述路由的示例输出:

/foo/:bar  *       foobar
  +/       DELETE  
  +/     
*

因此,我们可以看到,Mojolicious现在将为/foo/:bar/和任何其他请求方法提供URL DELETE,但是尾部斜杠始终是可选的,并且/foo/:bar可以正常工作。 / p>

在这种情况下:under('/foo/:bar')->to( example#zero )example#zero是中间目的地,因此在此路由下定义的所有路由都将访问example#zero,并且只有在其继续执行自己的目的地之后。因此,under( ... )->to( ... )可用于身份验证和其他类似任务。在我的示例中,under()没有使用to()

P.S。 Mojolicious随附了精美的文档,我鼓励大家积极使用它

Mojolicious::Routes::Route

Mojolicious::Guides::Routing