gpt4 book ai didi

perl - 使用 Mojo::Base 从模块访问 Mojolicious 助手?

转载 作者:行者123 更新时间:2023-12-01 11:34:03 24 4
gpt4 key购买 nike

我有一个现有的应用程序(我的网站),我正在做一些代码整理,整理遵循与 Mojo::Pg 相同的想法。示例 here ,使用单独的模型和 Controller 文件来定义事物。我的站点同时访问 Flickr 和 Last.fm 的 API,并且我在 Site::Helpers 中定义了一个助手:

$app->helper(
get_base_rest_url => sub {
my ( $self, $config ) = @_;

sswitch ( $config ) {
case 'photos': {
my $base_url = 'https://api.flickr.com/services/rest/';
my $user_id = '7281432@N05';
my $api_key = $self->app->config->{ 'api_token' }{ 'flickr' };

my $url =
"$base_url"
. "?user_id=$user_id"
. "&api_key=$api_key"
. "&per_page=" . $self->session->{ per_page }
. '&format=json'
. '&nojsoncallback=1';

return $url;
}

case 'music': {
my $base_url = 'https://ws.audioscrobbler.com/2.0/';
my $username = 'virtualwolf';
my $api_key = $self->app->config->{ 'api_token' }{ 'last_fm' };
my $per_page = $self->session->{ 'per_page' };

my $url = "$base_url?user=$username&limit=$per_page&api_key=$api_key&format=json";

return $url;
}
}
}
);

我遇到的问题是我不知道如何从 Site::Model::Photos 模块访问该助手。错误是

Can't locate object method "get_base_rest_url" via package "Site::Model::Photos"

这很公平,但我不知道如何实际获取那个 get_base_rest_url 帮助器(或者,如何访问 api_token 配置)。

最佳答案

问题是您的模块没有获得访问您的应用程序的应用程序属性/方法。

因此,当您创建 Site::Model::Photos 的实例时,您需要在参数中将 app 传递给它并使其削弱类似这样的东西:

package Site::Model::Photos
use Scalar::Util 'weaken';
sub new {
my $class = shift;
my $app = shift;
my $hash = {app => $app, ...};
weaken $hash->{app};
return bless $hash, $class;
}

sub your_method {
my $self = shift;
$self->{app}->get_base_rest_url(...);
}

1;

或者你可以使用这个模块https://metacpan.org/release/Mojolicious-Plugin-Model哪个为你做的:

package Site::Model::Photos
use Mojo::Base 'MojoX::Model';

... code of your module ...

sub your_method {
my $self = shift;
$self->app->get_base_rest_url(...);
}

1;

并且在你的 App.pm 中需要添加这个:

$app->plugin('Model', {namespaces => ['Site::Model']});

并在 Controller 中使用它:

$c->model('photos');
$c->app->model('photos');

关于perl - 使用 Mojo::Base 从模块访问 Mojolicious 助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29325477/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com