我可以转发到 Mojolicious 中同一控制器中的操作吗
Can I forward to action in same controller in Mojolicious
如果我将我的应用程序与 Controller 拆分 类 我可以做到
get '/foo/bar' => { controller => 'Foo', action => 'bar' };
如果我的操作在同一个 Mojolicious::Lite 文件中,我可以做同样的事情吗?
现在我
sub foobar {
my $c = shift;
...
}
get '/' => sub { foobar(@_) };
但我想做
get '/' => { action => 'foobar' };
为了以后的一致性和便于拆分,我应该决定这样做,同时保持一般的 Mojolicious::Lite 结构(即:单个文件)。
如何做到这一点?
虽然 Mojolicious::Lite 是一个非常简单的包装器,但在 Lite 脚本中定义的任何子程序都不是控制器方法,而是应用程序方法。除了定义控制器之外,没有真正的方法让它们成为控制器方法,即使在精简版应用程序(非常 简单包装器)中也是完全可能的,但会使它变得不那么精简。不过,另一个方向很容易实现;您可以将匿名子例程作为完整应用程序中的操作。您还可以将您的操作编写为助手,然后可以从匿名子例程或控制器操作中简单地调用它。对于完整的应用程序,这些中的任何一个都可能不是很好的代码组织。
无论如何,要点是 Mojolicious::Lite 脚本的内容等同于完整应用程序的 startup
子部分,而不是控制器。
如果我将我的应用程序与 Controller 拆分 类 我可以做到
get '/foo/bar' => { controller => 'Foo', action => 'bar' };
如果我的操作在同一个 Mojolicious::Lite 文件中,我可以做同样的事情吗?
现在我
sub foobar {
my $c = shift;
...
}
get '/' => sub { foobar(@_) };
但我想做
get '/' => { action => 'foobar' };
为了以后的一致性和便于拆分,我应该决定这样做,同时保持一般的 Mojolicious::Lite 结构(即:单个文件)。
如何做到这一点?
虽然 Mojolicious::Lite 是一个非常简单的包装器,但在 Lite 脚本中定义的任何子程序都不是控制器方法,而是应用程序方法。除了定义控制器之外,没有真正的方法让它们成为控制器方法,即使在精简版应用程序(非常 简单包装器)中也是完全可能的,但会使它变得不那么精简。不过,另一个方向很容易实现;您可以将匿名子例程作为完整应用程序中的操作。您还可以将您的操作编写为助手,然后可以从匿名子例程或控制器操作中简单地调用它。对于完整的应用程序,这些中的任何一个都可能不是很好的代码组织。
无论如何,要点是 Mojolicious::Lite 脚本的内容等同于完整应用程序的 startup
子部分,而不是控制器。