名称

Mojolicious::Plugin::DefaultHelpers-默认助手插件

简介

#Mojolicious公司$app->plugin(“DefaultHelpers”);#Mojolicious::精简插件“DefaultHelpers”;

说明

Mojolicious::Plugin::DefaultHelpers是的助手集合莫乔利奇.

这是一个核心插件,这意味着它始终处于启用状态,它的代码是学习构建新插件的好例子,欢迎您使用fork。

请参见Mojolicious::PLUGINS中的“PLUGINS”获取默认可用插件的列表。

帮助

Mojolicious::Plugin::DefaultHelpers实现以下帮助程序。

接受

my$formats=$c->接受;my$format=$c->接受('html,'json','txt');

从中选择资源的最佳表示形式格式 GET(获取)/邮政参数,格式存储值或接受请求标头Mojolicious::Renderer中的“接受”,如果检测不到首选项,则默认返回第一个扩展名。

#检查JSON是否可接受如果$c->接受('json'),则$c->渲染(json=>{hello=>'world'});#检查是否专门请求了JSON如果$c->接受(“”,“json”),则$c->render(json=>{hello=>'world'});#不支持的表示$c->render(数据=>“”,状态=>204)除非我的$format=$c->接受('html,'json');#要从中选择的检测到的表示my@formats=@{$c->接受};

应用程序

%=应用->机密->[0]

的别名Mojolicious::Controller中的“app”.

b条

%=b(“乔尔是个懒虫”)->懒虫化

将字符串转换为Mojo::ByteStream对象。

c(c)

%=c('a','b','c')->洗牌->加入

将列表转换为Mojo::系列对象。

配置

%=配置“某物”

的别名Mojolicious中的“config”.

内容

%=content foo=>开始测试%结束%=content bar=>“你好,世界!”%=内容“foo”%=内容“bar”%=内容

将部分呈现内容存储在命名缓冲区中,稍后检索,默认为检索命名缓冲区内容,渲染器用于布局延伸特征。如果命名缓冲区已在使用中,则将忽略新内容。

内容(_F)

%content_for-foo=>开始测试%结束%=“foo”的content_f

等同于“内容”,但如果命名缓冲区已在使用中,则将内容附加到命名缓冲区。

%content_for-message=>开始你好%结束%content_for-message=>开始世界!%结束%=内容“消息”

满足

%content_with foo=>开始测试%结束%=content_with“foo”

等同于“内容”,但替换已命名缓冲区的内容(如果它们已在使用中)。

%内容消息=>开始世界!%结束%content_with消息=>开始您好<%=内容“消息”%>%结束%=内容“消息”

csrf_标记

%=csrf_token

从获取CSRF令牌“会话”,如果不存在,则生成一个。

当前路由

%if(current_route“登录”){欢迎来到Mojolicious!% }%=当前路线

检查或获取当前路由的名称。

翻车机

%=转储器{some=>“数据”}

使用转储Perl数据结构Mojo::Util中的“dumper”,对调试非常有用。

例外_格式

我的$format=$c->exception_format;$c=$c->异常格式('text');

HTTP异常的格式(html格式,杰森,或文本),默认值为Mojolicious中的“exception_format”.

延伸

%扩展“蓝色”;%扩展'blue',title=>'blue!';

设置延伸隐藏值,所有附加的键/值对都会合并到“隐藏”.

闪光

我的$foo=$c->flash('foo');$c=$c->flash({foo=>'bar'});$c=$c->flash(foo=>“bar”);%=闪存“foo”

仅针对下一个请求的持久数据存储,存储在“会话”.

#重定向后显示消息$c->flash(消息=>“用户创建成功!”);$c->redirect_to('show_user',id=>23);

不活动超时

$c=$c->inactivity_timeout(3600);

使用Mojo::IOLoop中的“流”查找当前连接并尽可能增加超时。

#较长版本Mojo::IOLoop->stream($c->tx->connection)->超时(3600);

包括

%=包括“菜单栏”%=包括“菜单栏”,格式=>“txt”

的别名Mojolicious::Controller中的“render_to_string”.

刷新(_F)

我的$bool=$c->is_fresh;我的$bool=$c->is_fresh(etag=>“abc”);我的$bool=$c->is_fresh(etag=>'W/“def”');我的$bool=$c->is_fresh(last_modified=>$epoch);

通过比较If-无匹配If-修改自请求标头到电子标签上次修改时间响应标头Mojolicious::Static中的“is_fresh”.

#添加ETag/Last-Modified标头并在渲染之前检查新鲜度$c->is_fresh(etag=>“abc”,last_modified=>1424985708)? $c->渲染(304):$c->渲染(文本=>“I“莫名其妙!”);

布局

%布局“绿色”;%布局'green',title=>'green!';

设置布局隐藏值,所有附加的键/值对都会合并到“隐藏”.

日志

我的$log=$c->log;

替代Mojolicious中的“log”其中包括Mojo::Message::request中的“request_id”每个日志消息。

#使用上下文记录消息$c->log->debug(“这是一条带有请求id的日志消息”);#将带有上下文的记录器传递给模型我的$log=$c->log;$c->some_model->create({foo=>$foo},$log);

参数

%=参数'foo'

的别名Mojolicus中的“param”::控制器.

代理->获取

我的$promise=$c->proxy->getp('网址:http://example.com'=>{Accept=>'*/*'});

执行非阻塞GET(获取)请求并尽可能高效地转发响应,使用与Mojo::UserAgent中的“get”并返回Mojo::承诺对象。

#转发异常处理$c->proxy->get_p('http://mojolicious.org')->捕获(子($err){$c->log->debug(“代理错误:$err”);$c->render(文本=>“出现问题!”,状态=>400);});

代理->post_p

我的$promise=$c->proxy->postp('网址:http://example.com'=>{Accept=>'*/*'});

执行非阻塞邮政请求并尽可能高效地转发响应,使用与Mojo::UserAgent中的“帖子”并返回一个Mojo::承诺对象。

#转发异常处理$c->proxy->post_p('example.com’=>form=>{test=>'pass'})->catch(sub($err){$c->log->debug(“代理错误:$err”);$c->render(text=>“出现问题!”,状态=>400);});

代理->start_p

my$promise=$c->proxy->start_p(Mojo::Transaction::HTTP->new);

执行自定义的非阻塞请求Mojo::Transaction::HTTP对象并尽可能有效地转发响应,返回Mojo::承诺对象。

#转发异常处理my$tx=$c->ua->build_tx(GET=>'http://mojolicious.org');$c->proxy->start_p($tx)->catch(sub($err)){$c->log->debug(“代理错误:$err”);$c->render(文本=>“出现问题!”,状态=>400);});#使用自定义请求和响应标头转发my$headers=$c->req->headers->clone->dehop;$headers->header(“X-Proxy”=>“Mojo”);my$tx=$c->ua->build_tx(GET=>'网址:http://example.com'=>$headers->to_hash);$c->proxy->start_p($tx);$tx->res->content->once(body=>sub($content){$c->res->headers->header('X-Proxy'=>'Mojo')});

重定向到(_T)

$c=$c->redirect_to('named',foo=>'bar');$c=$c->redirect_to('named',{foo=>'bar'});$c=$c->redirect_to('/index.html');$c=$c->redirect_to('http://example.com/index.html');

准备一个302(如果状态代码尚未3xx个)重定向响应位置标头,采用与相同的参数“url_for”.

#永久移动$c->res->代码(301);$c->redirect_to('some_route');#临时重定向$c->res->代码(307);$c->redirect_to('some_route');

回复->资产

$c->reply->asset(Mojo::asset::File->new);

使用答复Mojo::Asset::文件Mojo::Asset::Memory(内存)对象使用Mojolicus中的“serve_asset”:静态,并与执行内容协商范围,If-修改自If-无匹配标题。

#使用自定义修改时间服务资产my$asset=Mojo::asset::Memory->new;$asset->add_chunk(“你好,世界!”)->mtime(784111777);$c->res->headers->content_type('text/plain');$c->reply->asset($asset);#服务静态文件(如果存在)if(我的$asset=$c->app->static->file('images/logo.png')){$c->res->headers->content_type('image/png');$c->reply->asset($asset);}

回复->异常

$c=$c->回复->异常(“哦!”);$c=$c->reply->exception(Mojo::exception->new);

通过委托给更具体的异常帮助程序,以适当的格式呈现异常响应。

回复->文件

$c->reply->file('/etc/passwd');

使用Mojolicious中的“static”.

#较长版本$c->reply->asset(Mojo::asset::File->new(路径=>'/etc/passwd'));#使用自定义内容类型从绝对路径提供文件$c->res->headers->content_type('application/myapp');$c->reply->文件('/home/sri/foo.txt');#从机密应用程序目录提供文件$c->reply->file($c->app->home->child('secret','file.txt'));

回复->html_exception

$c=$c->reply->html_exception(“哎哟!”);$c=$c->reply->html_exception(Mojo::exception->new);

呈现异常模板例外$模式$格式*例外$格式*并将响应状态代码设置为500。还设置存储值例外Mojo::异常对象和快照复制到“隐藏”用于模板中。

回复->html_not_found

$c=$c->回复->html_not_found;

呈现未找到的模板未找到$模式$格式*未找到$格式*并将响应状态代码设置为404。还设置存储值快照复制到“隐藏”用于模板中。

回复->json_exception

$c=$c->reply->json_exception('Oops!');$c=$c->reply->json_exception(Mojo::exception->new);

呈现JSON响应并将响应状态设置为500.

回复->json_not_found

$c=$c->reply->json_not_found;

呈现JSON响应并将响应状态设置为404.

回复->未找到

$c=$c->回复->未找到;

通过委派给更具体的异常帮助程序,以适当的格式呈现未找到的响应。

回复->静态

$c->reply->static('images/logo.png');$c->reply->static('../lib/MyApp.pm');

使用以下命令答复静态文件Mojolicious中的“static”,通常来自公众的目录或数据应用程序的节。请注意,此帮助器使用相对路径,但不能防止遍历父目录。

#使用自定义内容类型从相对路径提供文件$c->res->headers->content_type('application/myapp');$c->reply->static('foo.txt');

回复->txt_exception

$c=$c->reply->txt_exception(“哎哟!”);$c=$c->reply->txt_exception(Mojo::exception->new);

呈现纯文本响应并将响应状态设置为500.

回复->txt_not_found

$c=$c->回复->txt_not_found;

呈现纯文本响应并将响应状态设置为404.

响应

$c=$c->响应(json=>{json=>{message=>“欢迎!”}},html=>{template=>'welcome'},any=>子{…});

自动选择资源的最佳可能表示形式格式 GET(获取)/邮政参数,格式存储值或接受请求标头,默认为Mojolicious::Renderer中的“default_format”或呈现空204响应。可以使用回调或包含要传递给的参数的散列引用来处理每个表示Mojolicus中的“render”::控制器.

#除了“json”和“xml”之外的所有内容都会得到204个响应$c->响应(json=>sub{$c->render(json=>{just=>“works”})},xml=>{text=>'<just>works</just>'},any=>{data=>'',status=>204});

对于更高级的协商逻辑,您还可以使用“接受”.

阶段

%=会话“foo”

的别名Mojolicious::Controller中的“session”.

藏匿

%=存储“foo”%stash foo=>“bar”;

的别名Mojolicious::Controller中的“stash”.

%=stash('name')//“某人”

定时->开始

$c->timing->begin('foo');

为创建命名时间戳“定时->已过”.

计时->经过

我的$apsed=$c->timing->apsed('foo');

返回自使用创建命名timstamp以来的小数时间量(秒)“定时->开始”未定义如果不存在这样的时间戳。

#日志计时信息$c->计时->begin('database_stuff');...我的$easyd=$c->timing->easyd('database_stuff');$c->app->log->debug(“数据库花费了$秒”);

定时->rps

我的$rps=$c->计时->rps('0.001');

如果每个请求都花费了给定的时间(秒)或未定义如果数字太低。

#记录更多计时信息$c->timing->begin('web_stuff');...我的$easyd=$c->timing->easyd('web_stuff');我的$rps=$c->timing->rps($eased);$c->app->log->debug(“Web内容花费了$apsed seconds($rps/second)”);

定时->服务器定时

$c->timing->server_timing('metric');$c->timing->server_timing('metric','Some Description');$c->timing->server_timing(“metric”,“Some Description”,“0.001”);

创建服务器定时带有可选描述和持续时间的标头。

#“服务器计时:未命中”$c->timing->server_timing('miss');#“服务器计时:dc;desc=atl”$c->timing->server_timing('dc','atl');#“服务器计时:db;desc=数据库;dur=0.0001”$c->timing->begin('database_stuff');...我的$easyd=$c->timing->easyd('database_stuff');$c->timing->server_timing('db','Database',$eased);#“服务器计时:未命中,dc;desc=atl”$c->timing->server_timing('miss');$c->timing->server_timing('dc','atl');

标题

%=标题%标题“欢迎!”;%标题“欢迎!”,foo=>“bar”;

获取或设置标题隐藏值,所有附加的键/值对都会合并到“隐藏”.

ua公司

%=ua->get('mojolicious.org')->result->dom->at('title')->文本

的别名Mojolicus中的“ua”.

url用于

%=url_for“named”,foo=>“bar”,baz=>“yada”

的别名Mojolicious::Controller中的“url_for”.

%=url_for('/index.html')->查询(foo=>'bar')

用于资产的url

%=url_for_asset('/app.js');

的别名Mojolicious::Controller中的“url_for_asset”.

用于文件的url

%=url_for_file('/index.html');

的别名Mojolicious::Controller中的“url_for_file”.

url(_W)

%=url_with“named”,foo=>“bar”,baz=>“yada”

“网址_for”,但从当前请求继承查询参数。

%=url_with->query({page=>2})

验证

我的$v=$c->验证;

获取Mojolicious::Validator::Validation对象来验证文件上载以及GET(获取)邮政从查询字符串中提取的参数和应用程序/x-www-form-urlencoded多部分/表单数据消息正文。请求正文的部分需要加载到内存中以进行解析邮政参数,所以您必须确保它不是太大。默认情况下,请求的大小限制为16MiB。

#验证GET/POST参数我的$v=$c->验证;$v->需要(“标题”,“装饰”)->尺寸(3,50);my$title=$v->param(“标题”);#验证文件上传我的$v=$c->验证;$v->required('tarball')->upload->size(11048576);my$tarball=$v->param('tarball');

方法

Mojolicous::插件::DefaultHelpers从继承所有方法Mojolicious::插件并实现了以下新功能。

登记

$plugin->register(Mojolicios->new);

在中注册助手莫乔利奇应用程序。

另请参阅

莫乔利奇,Mojolicious::指南,https://mojolicious.org.