【问题标题】:How to use Mojolicious app inside DBIx Class schema?如何在 DBIx 类模式中使用 Mojolicious 应用程序?
【发布时间】:2013-07-23 08:16:49
【问题描述】:

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

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

<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(例如 &lt;%= $playlist-&gt;url($self) %&gt;),这并不好。

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

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

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

【问题讨论】:

  • 为什么不使用 stash 将数据传递给模板?
  • $playlist 使用 stash 传递给模板

标签: perl dbix-class mojolicious


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 2014-05-21
    • 2017-02-05
    • 2017-04-18
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多