mojolicious中路线名称的目的是什么?

use*_*508 6 perl routes mojolicious

我一直在学习如何使用Mojolicious框架对应用程序进行编程,而且我对使用路由名称的原因感到困惑.例如,路线可以说

$r->route('/cities/new')
      ->via('get')
      ->to(controller => 'cities', action => 'new_form')
      ->name('cities_new_form');
Run Code Online (Sandbox Code Playgroud)

但是name参数的目的是什么?我是Web框架的新手,所以这可能是一个简单的答案.

fri*_*edo 17

如果要动态生成URL,则命名路径允许您稍后引用它.在您的示例中,您可以稍后在代码中执行此操作:

my $link = $self->url_for( 'cities_new_form' )
Run Code Online (Sandbox Code Playgroud)

并且$link会自动与一个URL在结束填充/cities/new.如果你的路线有动态部件,你可以得到它.例如:

$r->route( '/cities/:cityname' )
    ->via( 'get' )
    ->to( controller => 'cities', action => 'new_form' )
    ->name( 'cities_new_form' );
Run Code Online (Sandbox Code Playgroud)

然后你可以生成一个像这样的URL

my $link = $self->url_for( 'cities_new_form', cityname => 'newyork' );
Run Code Online (Sandbox Code Playgroud)

$link最终会/cities/newyork.

这些都是微不足道的例子,但是一旦你的路线越来越多,你可以建立相当复杂的东西.

如果您没有为路由命名,则会获得一个默认名称,该名称只是其中字母数字字符的串联.对于长路线来说,这可能会很繁琐,因此您可以使用名称来缩写它们.

另请参阅Mojolicious文档中的命名路由.