如何在DBIx类架构中使用Mojolicious应用程序?

时间:2013-07-23 08:16:50

标签: perl dbix-class mojolicious

我有使用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 } );

1 个答案:

答案 0 :(得分:2)

MVC应用程序中的模型应该解耦,以便它也可以在应用程序之外使用。

控制器的任务是从模型中获取数据并将其传递给视图。

您的模板完全没问题,无需更改任何内容。