0

我有使用 DBIx::Class 的 Mojolicious 应用程序。它工作正常,但现在我想在 DBIx::Class 模式模块中使用 Mojolicious 应用程序对象。

在模板中,我使用此代码显示链接:

<a href="<%= $self->url_for('playlist', name => $playlist->name) %>">...</a>

现在我想将生成 url 的部分代码移动到 DBIx::Class 模式模块中,以便在模板中我可以有这个:

<a href="<%= $playlist->url %>">...</a>

我试图通过sub url在我的 Schema::Result::Playlist.pm 中创建来实现这一点

sub url {
    my $self = shift;
    my ($app) = @_;
    return $app->url_for('playlist', name => $self->name);
}

这可行,但需要将 Mojolicious 应用程序传递给url(例如<%= $playlist->url($self) %>),这并不好。

是否有一种优雅的方法可以一次向所有 DBIx::Class 模式模块提供 Mojolicious 应用程序对象,可能在应用程序启动期间?

这是我的应用startup程序例程中的架构初始化:

my $schema = MyApp::Schema->connect(
    'dbi:mysql:dbname=myapp',
    'xxxx',
    'xxxx',
    { mysql_enable_utf8 => 1, },
);
$self->helper( schema => sub { $schema } );
4

1 回答 1

2

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

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

您的模板非常好,无需更改任何内容。

于 2013-07-23T14:30:24.990 回答