我有使用DBIx :: Class的Mojolicious应用程序。它运行正常,但现在我想在DBIx :: Class架构模块中使用Mojolicious app对象。
在模板中,我使用此代码显示链接:
<a href="<%= $self->url_for('playlist', name => $playlist->name) %>">...</a>
现在我想将生成url的部分代码移动到DBIx :: Class模块模块中,这样在模板中我可以拥有这个:
<a href="<%= $playlist->url %>">...</a>
我试图通过在我的Schema :: Result :: Playlist.pm
中创建sub url
来实现这一点。
sub url {
my $self = shift;
my ($app) = @_;
return $app->url_for('playlist', name => $self->name);
}
这有效,但需要将Mojolicious应用程序传递给url
(例如<%= $playlist->url($self) %>
),这不是很好。
是否有一种优雅的方式可以同时向所有DBIx :: Class架构模块提供Mojolicious app对象,也许是在应用启动期间?
这是我的应用startup
例程中的架构初始化:
my $schema = MyApp::Schema->connect(
'dbi:mysql:dbname=myapp',
'xxxx',
'xxxx',
{ mysql_enable_utf8 => 1, },
);
$self->helper( schema => sub { $schema } );
答案 0 :(得分:2)
MVC应用程序中的模型应该解耦,以便它也可以在应用程序之外使用。
控制器的任务是从模型中获取数据并将其传递给视图。
您的模板完全没问题,无需更改任何内容。