- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下面是一个 Mojolicious (6.14) 应用程序示例...对于 $_[0] 和其他不尽如人意的做法感到抱歉;我试着让它变得紧凑。
package ScopeTest;
use Mojo::Base 'Mojolicious';
sub startup {
my $app = shift;
$app->helper( hello => sub { "Hello!" } );
$app->helper( username => sub { $_[0]->session('username'); } );
$app->helper( model => sub { ScopeTest::Model->new( app => $_[0]->app ) } );
$app->helper( hasPerm => sub { $_[0]->model->hasPerm( @_ ) } );
$app->routes->get('/alice')->to('controller#alice');
$app->routes->get('/carol')->to('controller#carol');
$app->routes->get('/steve')->to('controller#steve');
}
##############################
package ScopeTest::Controller;
use Mojo::Base 'Mojolicious::Controller';
sub alice { $_[0]->session( username => "alice" ); $_[0]->render_message() }
sub carol { $_[0]->session( username => "carol" ); $_[0]->render_message() }
sub steve { $_[0]->session( username => "steve" ); $_[0]->render( text =>
sprintf "%s: %s\n", $_[0]->username, $_[0]->model->update_db ? 'Okay' : 'Fail' ) }
sub render_message { $_[0]->render( text =>
sprintf "%s: %s\n", $_[0]->username, $_[0]->hasPerm('canLogin') ? 'Okay' : 'Fail' ) }
##############################
package ScopeTest::Model;
use Mojo::Base -base;
has 'app';
my %perms = ( alice => [ qw{ canLogin } ],
carol => [ ],
steve => [ qw{ canUpdateDB } ] );
sub hasPerm {
my ( $self, $perm ) = @_;
no warnings 'uninitialized';
$self->app->log->debug("app->hello = " . $self->app->hello ); # OKAY
$self->app->log->debug("app->username = " . $self->app->username ); # FAILS
$self->app->log->debug("session('username') = " . $self->app->session('username') ); # FAILS
$self->app->log->debug("session->{'username'} = " . $self->app->session->{'username'} ); # FAILS
my $username; # = $self->app->username;
return grep { $_ eq $perm } @{ $perms{$username} };
}
sub update_db {
my ( $self, $data ) = @_;
$self->hasPerm('canUpdateDB') or return;
# else ...
return 1;
}
1;
虽然像 $self->app->log->debug()
和 $self->app->dumper()
和其他帮助程序做的是正确的事情,$self->app->session
没有。
我知道传入 $app
被认为不太理想,但我希望以上内容至少可以工作...
除了一遍又一遍地传递用户名(这是一个玩具示例;真正的应用程序有许多不同的方法,有时会相互调用,等等)是否有一种更清晰的方法来从模型类中访问 session 数据?
PS — 在你说之前,Model->new(username => $self->session('username')
,这意味着知道,先验,我需要什么 session 变量,并在构造函数和属性列表中枚举它们;我希望如果我只是传入整个 $app
(甚至 $app->session
),我可以让事情永不过时。
谢谢!
最佳答案
我犯的错误是:“ session ”信息与应用程序无关;它与 Controller 相关联:
$app->helper( model => sub { ScopeTest::Model->new( ctrl => $_[0] ) } );
然后:
package ScopeTest::Model;
use Mojo::Base -base;
has 'ctrl';
...
$self->ctrl->app->log->debug("username = " . $self->ctrl->username );
是的,我知道将 Controller 传递给 Model 仍然不是最佳选择,但这至少解释了为什么我之前根本无法让它工作......
关于perl - 如何访问 Mojolicious 模型中的 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691071/
我有一个由 Hypnotoad 提供的应用程序,没有反向代理。它有 15 个工作人员,每个允许 2 个客户端。该应用程序在前台模式下通过催眠启动。 我在 log/production.log 中看到以
为了在这个有趣的应用程序中正确路由输入信息,我使用了“下方”功能。为什么这段代码不起作用,但第二个 block 中的代码却可以实际从数据库中删除所选项目。 my $r_hostservices =
我是 Mojo 框架的新手……我浏览了 Mojolicious website 上的一些维基页面。 ,但是很多东西都看不懂。该文档似乎适用于已经具有 Mojo 框架背景的人。 所以,我想知道是否有任何
我有一个很大的日志文件,想用 Mojolicious 的浏览器打开它。我的客户将点击链接,我想从服务器读取文件内容并将其返回给用户。我使用以下技巧来解决它: my $res = `cat $file`
书面通知 Galileo我在模板中加入了一些逻辑( .html.ep ),没什么,但有一些。为此,我想知道是否可以将这些文件包含在测试覆盖率分析中。 我尝试了一些东西,最有希望的是 HARNESS_P
我正在尝试重用以前建立的 websocket 连接来避免 websocket 握手。我发现可以使用 build_websocket_tx 构建自定义 websocket 事务(更多详细信息 here
我像这样设置了一个快速的 Mojolicious 服务器: use Mojolicious::Lite; get '/' => sub { my $self = shift; slee
在我的 Mojolicious perl 代码中,我处理从远程客户端创建和监视的作业。 我将作业保存在哈希数组中,这是一个全局变量。 然后在 PUT '/job/create' 和 GET '/job
我正在寻找 Mojolicious one liner 来提供静态文件并默认列出目录 我来到这个类轮: perl -Mojo -E "a->static->paths(['c:\temp']);a->
我正在 Mojolicious 中寻找身份验证。我有 2 页 momcorp1 和 momcorp2,但我不能通过在多页之间,有人知道该怎么做。 我正在阅读有关“under”的内容,但我不知道该怎么做
我有以下代码: get '/:foo' => sub { my $c = shift; my $v = $c->validation; my $foo = $c->param('y
以下示例代码来自 http://mojolicio.us/当前在 morbo 下运行在 http://62.113.243.155/ use Mojolicious::Lite; # Simpl
我正在 Mojolicious 中寻找身份验证。我有 2 页 momcorp1 和 momcorp2,但我不能通过在多页之间,有人知道该怎么做。 我正在阅读有关“under”的内容,但我不知道该怎么做
我有 perl 应用程序,例如,在 google 中进行并行搜索: use Mojo::UserAgent; use Mojo::IOLoop; my $ua = Mojo::UserAgent->n
我正在查看文档 http://mojolicio.us/perldoc/Mojolicious/Lite 我正在粘贴教程中的示例,但几乎总是收到此错误消息: 找不到页面...还没有! 我试过的最后一个
我来自 perl Cgi,我从 mojolicious(以及网络框架)开始,使用这个 github 作为例子: https://github.com/webdevesgi/mojolicious-de
背景 我有这个路由 my $foo = $r->get('/foo/:asd')->to('Foo#bar'); 在 Controller 中,我只是用传递的参数渲染一些 json(在 Mojolic
我目前正在使用 Mojolicious 开发一个小型的单页 Web 应用程序。该应用程序有一个 Javascript 前端(使用 Backbone),可以与 REST-ish API 通信;源码的布局
正如标题所说,我不知道为什么。唯一发生的事情是出现在工作目录中的 hypnotaod.pid 文件。没有正在运行的进程,没有监听定义的端口。此外 - 使用 morbo 一切正常。 编辑:我已经跟踪了启
如果有更多有用的代码或错误,请告诉我。 我的问题是我有外部 JS 文件,我的所有页面都可以找到它们接受一个。当我转到“用户”部分时,我得到每个外部文件的 404。另外,它似乎每个请求两次? 我在公用文
我是一名优秀的程序员,十分优秀!