【问题标题】:Perl Mojolicious UnderPerl Mojolicious 下
【发布时间】:2017-08-25 18:57:20
【问题描述】:

为了在这个 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');

【问题讨论】:

    标签: perl mojolicious


    【解决方案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 现在将为 DELETE 和任何其他请求方法提供 url /foo/:bar/,但尾部斜杠始终是可选的,/foo/:bar 可以正常工作。

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

    附: Mojolicious 附带了精彩的文档,我鼓励大家积极使用它

    Mojolicious::Routes::Route

    Mojolicious::Guides::Routing

    【讨论】: