模块:Mojolicious公司
起源:Mojo::基础

名称

Mojolicious-实时web框架

简介

#应用程序包MyApp;使用Mojo::Base“Mojolicious”,-签名;#路线子启动($self){$self->routes->get('/hello')->to('foo#hello');}#控制器包MyApp::控制器::Foo;使用Mojo::Base“Mojolicious::Controller”,-签名;#行动sub-hello($self){$self->render(text=>“Hello World!”);}

描述

在强大的莫霍web开发工具包。支持RESTful路由、插件、命令、Perl-ish模板、内容协商、会话管理、表单验证、测试框架、静态文件服务器,CGI公司/PSGI公司检测、一流的Unicode支持以及更多您需要了解的内容。

查看我们在中的优秀文档Mojolicious::指南!

挂钩

Mojolicious公司将按列出的顺序发出以下挂钩。

命令之前

在应用程序通过命令行界面运行命令之前发出。

$app->hook(before_command=>sub($command,$args){…});

用于在运行命令之前重新配置应用程序或修改命令的行为。(传递了命令对象和命令参数)

服务器启动之前

在应用程序服务器启动之前发出,用于支持它的web服务器,包括所有内置服务器。

$app->hook(before_server_start=>sub($server,$app){…});

用于动态重新配置应用程序服务器或收集服务器诊断信息。(传递了服务器和应用程序对象)

建成后tx

在构建事务之后和解析HTTP请求之前立即发出。

$app->hook(after_build_tx=>sub($tx,$app){…});

这是一个非常强大的钩子,不应该轻易使用,它使一些相当高级的功能,如上传进度条成为可能。注意,这个钩子不适用于嵌入式应用程序,因为只有宿主应用程序才能构建事务。(传递了事务和应用程序对象)

发货周围

在收到新请求后立即发出,并环绕整个分派过程,因此如果要继续链,必须手动转发到下一个钩子。默认异常处理Mojolicous::Plugin::DefaultHelpers中的“reply->exception”是链子上的第一个钩子“调度”最后,你的将处于中间。

$app->hook(around_dispatch=>sub($next,$c){...$下一个->();...});

这是一个非常强大的钩子,不应轻易使用,它允许您自定义应用程序范围的异常处理,将其视为工具箱中的重锤。(传递了一个指向下一个钩子和默认控制器对象的回调)

发货前

在静态文件服务器和路由器开始工作之前发出。

$app->hook(before_dispatch=>sub($c){…});

对于重写传入的请求和其他预处理任务非常有用。(传递了默认控制器对象)

后_静态

在静态文件服务器生成静态文件响应后发出。

$app->hook(after_static=>sub($c){…});

主要用于后处理静态文件响应。(传递了默认控制器对象)

before_routes之前

在静态文件服务器确定是否应提供静态文件之后,路由器开始工作之前发出。

$app->hook(before_routes=>sub($c){…});

主要用于定制调度器和收集指标。(传递了默认控制器对象)

围绕_操作

在一个动作被执行之前发出并环绕它,所以如果你想继续这个链,你必须手动转发到下一个钩子。默认操作调度是链中的最后一个钩子,您的操作将在它之前运行。

$app->hook(around_action=>sub($next,$c,$action,$last){...返回$next->();});

这是一个非常强大的钩子,不应该轻易使用,例如,它允许您向操作传递附加参数或以不同的方式处理返回值。请注意,如果存在嵌套路由,此钩子可以为同一请求触发多次。(传递了指向下一个钩子、当前控制器对象、操作回调和指示此操作是否为端点的标志的回调)

before_render之前

在渲染器生成内容之前发出。注意,由于其动态特性,此钩子可能会触发无序,并且对于嵌入式应用程序,它只适用于正在渲染的应用程序。

$app->hook(before_render=>sub($c,$args){…});

主要用于预处理传递给渲染器的参数。(传递了当前控制器对象和呈现参数)

后读器

在将分配给响应的渲染器生成内容后发出。注意,由于其动态特性,此钩子可能会触发无序,并且对于嵌入式应用程序,它只适用于正在渲染的应用程序。

$app->hook(after_render=>sub($c,$output,$format){…});

主要用于后处理动态生成的内容。(传递了当前控制器对象、对内容和格式的引用)

发货后(_D)

在生成响应后以相反的顺序发出。注意,由于其动态特性,此钩子可能会无序触发,并且对于嵌入式应用程序,它只适用于生成响应的应用程序。

$app->hook(after_dispatch=>sub($c){…});

用于重写传出响应和其他后期处理任务。(通过当前控制器对象)

属性

Mojolicious公司实现以下属性。

命令

我的$commands=$app->命令;$app=$app->commands(Mojolicious::commands->new);

应用程序的命令行界面,默认为Mojolicious::命令对象。

#添加另一个命名空间以从中加载命令push@{$app->commands->namespaces},“MyApp::Command”;

控制器类

我的$class=$app->controller_class;$app=$app->controller_class(“Mojolicious::controller”);

用于默认控制器的类,默认为Mojolicious::控制器。请注意,在第一个请求到达之前,必须已经加载了此类。

例外_格式

我的$format=$app->exception_format;$app=$app->exception_format('text');

HTTP异常的格式(html格式,杰森,或文本),默认为html格式.

my$home=$app->home;$app=$app->home(Mojo::home->new);

应用程序的主目录默认为Mojo::主页对象的字符串指向实际路径。

#可移植地生成相对于主目录的路径my$path=$app->home->child('data','important.txt');

日志

我的$log=$app->log;$app=$app->log(Mojo::log->new);

应用程序的日志层默认为Mojo::日志对象。级别将默认为MOJO_LOG_LEVEL(MOJO_日志_级别)环境变量,追踪如果“模式”发展,或信息否则。所有消息都将写入STDERR公司默认情况下。

#记录调试消息$app->log->debug(“它有效”);

最大请求大小

我的$max=$app->max_request_size;$app=$app->最大请求大小(16777216);

最大请求大小(以字节为单位),默认值为Mojo::message中的“max_message_size”.将值设置为0将允许不确定大小的请求。请注意,如果您尝试使用方法解析过大的请求体,那么增加该值也会显著增加内存使用量Mojo中的“dom”::消息Mojo::Message中的“json”.

模式

我的$mode=$app->mode;$app=$app->模式(“生产”);

应用程序的操作模式默认为MOJO_模式播放_ENV环境变量或发展.

绰号

我的$moniker=$app->moniker;$app=$app->名字('foo_bar');

此应用程序的标记通常用作配置文件等的默认文件名,默认使用Mojo::Util中的“decamelize”.

插件

我的$plugins=$app->plugins;$app=$app->plugins(Mojolicious::plugins->new);

插件管理器,默认为Mojolicious::插件对象。请参阅“插件”方法。

#添加另一个命名空间以从中加载插件推@{$app->plugins->namespaces},'MyApp::Plugin';

preload_namespaces(预加载名称空间)

my$namespaces=$app->preload_namespaces;$app=$app->preload_namespaces([“我的应用程序::控制器”]);

在应用程序启动期间从中预加载类的命名空间。

渲染器

我的$renderer=$app->renderer;$app=$app->renderer(Mojolicious::renderer->new);

用于呈现内容,默认为Mojolicious::渲染器对象。有关如何生成内容的更多信息,请参阅Mojolicious::辅助线::渲染.

#启用压缩$app->renderer->compress(1);#添加另一个“模板”目录推@{$app->renderer->paths},'/home/sri/templates';#添加另一个优先级更高的“模板”目录取消移动@{$app->renderer->paths},'/home/sri/themes/blue/templates';#在DATA部分添加另一个带有模板的类push@{$app->renderer->classes},“Mojolicious::Plugin::Fun”;

路线

我的$routes=$app->routes;$app=$app->路线(Mojolicus::路线->新路线);

路由器默认为Mojolicious::路线对象。您可以在启动方法中使用它来定义应用程序的url端点。

#添加路由我的$r=$app->路线;$r->get('/foo/bar')->to('test#foo',title=>'Hello Mojo!');$r->post(“/baz”)->to(“test#baz”);#添加另一个命名空间以从中加载控制器push@{$app->routes->namespaces},“MyApp::MyController”;

秘密

我的$secrets=$app->secrets;$app=$app->机密([$bytes]);

用于签名Cookie等的密码短语默认为“绰号”这个应用程序不太安全,所以您应该更改它!!!只要您使用不安全的默认值,日志文件中就会出现调试消息,提醒您更改密码短语。只有第一个密码短语用于创建新签名,但所有密码短语都用于验证。因此,您可以通过旋转密码短语来提高安全性,而不会使所有现有的已签名cookie失效,只需在前面添加新的密码短语,然后从后面删除旧的密码短语。

#旋转密码短语$app->机密(['new_passw0rd','old_passw10rd','very_old_passw0rd');

会议

我的$sessions=$app->sessions;$app=$app->sessions(Mojolicious::sessions->new);

基于签名cookie的会话管理器,默认为Mojolicuis::会话对象。你通常可以不用管这个,看Mojolicious::Controller中的“session”有关使用会话数据的更多信息。

#更改用于所有会话的cookie的名称$app->sessions->cookie_name('mysession');#禁用SameSite功能$app->sessions->samesite(undef);

静止的

我的$static=$app->static;$app=$app->static(Mojolicious::static->new);

用于从您的公众的目录,默认为Mojolicious::静态对象。

#仅为带有“/static”前缀的静态文件提供服务$app->static->prefix('/static');#添加另一个“公用”目录推@{$app->static->paths},'/home/sri/public';#添加另一个具有更高优先级的“公共”目录取消移动@{$app->static->paths},'/home/sri/themes/blue/public';#在DATA部分添加另一个带有静态文件的类push@{$app->static->classes},“Mojolicious::Plugin::Fun”;#删除内置favicon删除$app->static->extra->{'avicon.ico'};

类型

我的$types=$app->types;$app=$app->types(Mojolicious::types->new);

负责使用MIME类型连接文件扩展名,默认为Mojolicious::类型对象。

#添加自定义MIME类型$app->types->type(twt=>“文本/推文”);

ua公司

我的$ua=$app->ua;$app=$app->ua(Mojo::UserAgent->new);

在应用程序中使用的功能齐全的HTTP用户代理默认为Mojo::用户代理对象。

#执行阻塞请求说$app->ua->get('example.com')->result->body;

验证器

我的$validator=$app->validator;$app=$app->validator(Mojolicious::validator->new);

验证值,默认为Mojolicious::验证器对象。

#添加验证检查$app->validator->add_check(foo=>sub($v,$name,$value){返回$value ne'foo';});#添加验证筛选器$app->validator->add_filter(quotemeta=>sub($v,$name,$value){返回配额$value;});

方法

Mojolicious公司从继承所有方法Mojo::基础并实现以下新功能。

内置控制器

我的$c=$app->build_controller;my$c=$app->build_controller(Mojo::Transaction::HTTP->new);my$c=$app->build_controller(Mojolicious::controller->new);

使用生成默认控制器对象“控制器类”.

#从应用程序渲染模板我的$foo=$app->build_controller->render_toString(模板=>'foo');

构建_tx

我的$tx=$app->build_tx;

生成Mojo::事务::HTTP对象和发射“建成后_tx”挂钩。

配置

我的$hash=$app->config;我的$foo=$app->config('foo');$app=$app->config({foo=>'bar',baz=>23});$app=$app->config(foo=>'bar',baz=>23);

应用程序配置。

#删除值my$foo=删除$app->config->{foo};#一次指定多个值$app->config(foo=>“测试”,bar=>23);

默认值

我的$hash=$app->默认值;my$foo=$app->默认值('foo');$app=$app->defaults({foo=>'bar',baz=>23});$app=$app->默认值(foo=>“bar”,baz=>23);

的默认值Mojolicious::Controller中的“stash”为每个新请求分配。

#删除值my$foo=delete$app->defaults->{foo};#一次指定多个值$app->默认值(foo=>“测试”,bar=>23);

派遣

$app->dispatch(Mojolicious::Controller->new);

每个人的心Mojolicious公司应用程序,调用“静态”“路由”调度员处理每个请求,并向他们传递一个Mojolicious::控制器对象。

处理程序

$app->handler(Mojo::Transaction::HTTP->new);$app->handler(Mojolicious::Controller->new);

设置默认控制器并发出“大约发货”钩住每个请求。

帮手

$app->helper(foo=>sub{…});

添加或替换将作为控制器对象和应用程序对象的方法以及中的函数使用的帮助程序电动自行车模板。有关默认情况下可用的助手的完整列表,请参见Mojolicious::Plugin::DefaultHelpersMojolicious::插件::TagHelpers.

#助手$app->helper(缓存=>sub{state$cache={}});#应用程序$app->cache->{foo}='bar';我的$result=$app->cache->{foo};#控制器$c->cache->{foo}='bar';我的$result=$c->cache->{foo};#模板%cache->{foo}=“bar”;%=缓存->{foo}

$app->hook(after_dispatch=>sub{…});

延伸Mojolicious公司使用钩子,可以不加区别地与所有请求共享代码,有关可用钩子的完整列表,请参阅“挂钩”.

#如果已经定义了响应代码,则调度程序将不会运行$app->hook(before_dispatch=>sub($c)){$c->render(text=>“跳过了静态文件服务器和路由器!”)如果$c->req->url->path->toroute=~/donotdispatch/;});

新的

my$app=Mojolicus->新建;my$app=Mojolicios->new(名字=>'foo_bar');my$app=Mojolicios->new({moniker=>'foo_bar'});

构建新的Mojolicious公司应用程序和调用“启动”。将自动检测您的主目录。还设置渲染器、静态文件服务器、默认插件集和“大约发货”挂钩与默认的异常处理。

插件

$app->插件(“some_thing”);$app->plugin('some_thing',foo=>23);$app->plugin('some_thing',{foo=>23});$app->插件(“SomeThing”);$app->plugin('SomeThing',foo=>23);$app->插件('SomeThing',{foo=>23});$app->plugin('MyApp::plugin::SomeThing');$app->plugin('MyApp::plugin::SomeThing',foo=>23);$app->plugin('MyApp::plugin::SomeThing',{foo=>23});

加载插件,以获取包含在Mojolicious公司分布参见Mojolicious::PLUGINS中的“PLUGINS”.

服务器

$app->server(Mojo::server->new);

发出“服务器启动之前”挂钩。

开始

$app->start;$app->start(@ARGV);

启动应用程序的命令行界面。有关默认情况下可用命令的完整列表,请参阅Mojolicious::COMMANDS中的“COMMANDS”注意,选项-小时/--帮助,--家-米/--模式将从解析所有命令共享的@ARGV公司在编译时。

#始终启动守护程序$app->start('daemon','-l','http://*:8080');

启动

$app->启动;

这是应用程序的主挂钩,将在应用程序启动时调用。意思是在子类中重载。

子启动($self){…}

热身

$app->预热;

从预加载类“预加载命名空间”供将来使用。

帮助

除了“属性”“方法”您还可以在上面呼叫助手Mojolicious公司物体。这包括来自的所有助手Mojolicous::插件::DefaultHelpersMojolicious::插件::TagHelpers请注意,应用程序帮助程序总是使用新的默认控制器对象调用,因此它们不能依赖或更改控制器状态,其中包括请求、响应和存储。

#呼叫助手说$app->dumper({foo=>'bar'});#较长版本比如$app->buildcontroller->helpers->dumper({foo=>'bar'});

捆绑文件

这个Mojolicious公司发行版包括一些具有不同许可证的文件,这些文件已捆绑在一起供内部使用。

Mojolicious艺术品

版权所有(C)2010-2024,Sebastian Riedel。

根据CC-SA许可证4.0版进行许可http://creativecommons.org/licenses/by-sa/4.0.

高亮.js

版权所有(C)2006,Ivan Sagalaev。

根据BSD许可证许可,https://github.com/highlightjs/highlight.js/blob/master/LICENSE.

引导数据库

版权所有2011-2020 The Bootstrap Authors。版权所有2011-2020 Twitter,Inc。

获得麻省理工学院许可证,http://creativecommons.org/licenses/MIT.

象形异体字

根据CC-BY许可证4.0版进行许可https://creativecommons.org/licenses/by/4.0/和SIL OFL,版本1.1https://opensource.org/licenses/OFL-1.1.

代码名称

的每个主要版本Mojolicious公司有一个代码名,这些是过去使用过的。

9.0,华夫饼干(U+1F9C7)

8.0,Supervillain公司(U+1F9B9)

7.0,炸圈饼(U+1F369)

6.0中,叮当作响的啤酒杯(U+1F37B)

5.0,老虎脸(U+1F42F)

4.0,顶帽(U+1F3A9)

3.0,彩虹(U+1F308)

2.0,树叶在风中飘动(U+1F343)

1.0,雪花(U+2744)

赞助者

  • Stix公司赞助创建Mojolicios标志(由Nicolai Graesdal设计),并将其版权转让给Sebastian Riedel。

  • 该发行版的部分工作由Perl基金会.

作者

Mojolicious公司是一个依赖其贡献者不懈支持的开源项目。

项目创始人

塞巴斯蒂安·里德尔,kraih@mojolicious.org

核心开发人员

核心团队当前投票成员(按字母顺序排列):

    糖果天使,candyangel@mojolicious.org

    克里斯托弗·拉希·奥尔森·拉阿,christopher@mojolicious.org

    丹·布克,grinz@mojolicious.org

    简·亨宁·托森,batman@mojolicious.org

    乔尔·伯杰,jberger@mojolicious.org

    马库斯·兰伯格,marcus@mojolicious.org

以下核心团队成员目前处于休息状态:

    Abhijit Menon-Sen,ams@cpan.org网站

    格伦·辛克尔,tempire@cpan.org

贡献者

按字母顺序:

    亚当·甘迺迪

    阿德里亚诺·费雷拉

    阿尔·纽柯克

    亚历克斯·埃弗罗斯

    亚历克斯·萨利蒙

    亚历山大·卡拉斯

    阿列克谢·利哈茨基

    阿纳托利·谢里夫林

    安德烈·帕克

    安德烈·维思

    安德烈亚斯·古德斯特朗

    安德烈亚斯·贾克尔

    安德烈亚斯·柯尼格

    安德鲁·弗雷斯

    安德鲁·努格

    安德烈·霍佐夫

    安德烈·库兹明

    安迪·格兰德曼

    安迪·莱斯特

    亚里士多德·帕加尔茨

    阿什利·戴夫

    询问比约恩·汉森

    唐凤

    本·泰勒

    本·范·斯塔维伦

    本杰明·埃尔哈特

    伯恩哈德·格拉芙

    布伦诺·德奥利维拉

    布莱恩·杜根

    布莱恩·梅德利

    伯拉克·古尔索伊

    Ch Lamprecht公司

    查理·布雷迪

    查斯。J·欧文斯四世

    蔡斯·怀特纳

    克里斯·谢勒

    克里斯汀·汉森

    彩色的

    Curt Tilmes公司

    丹尼尔·金赛

    丹尼尔·曼托瓦尼

    达尼杰尔·塔索夫

    达格芬·伊尔玛丽·曼斯克尔

    丹尼·托马斯

    戴维斯

    韦伯

    迭戈·库佩尔曼

    德米特里·沙拉舍夫

    德米特里·康斯坦蒂诺夫

    多米尼克·贾穆洛维奇

    多米尼克·杜蒙特

    Dotan Dimet公司

    道格拉斯·克里斯托弗·威尔逊

    埃尔玛·S·希布

    埃托雷·迪·贾辛托

    尤根·孔科夫

    尤金·托罗波夫

    弗拉维奥·波莱蒂

    Gisle Aas公司

    格雷厄姆·巴尔

    格雷厄姆·诺普

    海科·扬森

    唐英年

    埃尔南·洛佩斯

    山村秀树

    丰川弘子

    伊恩·古达克

    伊利亚·切斯诺科夫

    伊利亚·拉萨丁

    詹姆斯·邓肯

    简·乔纳·贾沃塞克

    简·施密特

    雅罗斯拉夫·穆欣

    杰西·文森特

    约翰内斯·普吕宁

    约翰金斯利

    乔纳森·俞(Jonathan Yu)

    乔什·莱德

    卡门·奈德诺夫

    凯伦·埃瑟里奇

    涉谷和弘

    凯文·奥尔德

    北村赤崎

    克劳斯·马德森

    克努特·阿恩·比约恩达尔

    拉斯·巴尔克·拉斯穆森

    约翰逊

    利昂·布罗卡

    卢卡斯·迈

    马格努斯·霍尔姆

    麦克·菲舍尔

    马克·福勒

    马克·格里姆斯

    马克·斯托斯伯格

    马丁·麦格拉斯

    马蒂网球

    马特S鳟鱼

    马修·莱宁

    马克西姆·科马

    Maxim Vuets公司

    迈克尔·格雷戈洛维奇

    迈克尔·哈里斯

    迈克尔·杰姆姆森

    迈克·马戈文

    米尔科·韦斯特梅尔

    蒙斯·安德森

    莫里茨·伦茨

    尼尔·沃特基斯

    尼克·桑德菲尔德

    尼尔斯·迪瓦尔德

    奥列格·哲洛

    奥利维尔·门格

    帕斯卡·高德特

    保罗·埃文斯

    保罗·罗宾斯

    保罗·汤姆林

    帕维尔·沙伊多

    佩德罗·梅洛

    彼得·爱德华兹

    皮埃尔·伊夫·里施卡

    Piotr Roszatycki公司

    昆汀碳纤维

    拉斐尔·波茨塔斯基

    兰达尔·施瓦茨

    罗利·福勒

    理查德·埃尔伯格

    里克·德莱尼

    罗伯特·希克斯

    罗伯特·罗森伯格

    罗宾·李

    罗兰·兰梅尔

    罗伊·斯托里

    瑞安·延杜比

    萨尔瓦多·范迪诺

    圣地亚哥·萨拉特

    萨沙·基弗

    斯科特·维尔斯多夫

    塞巴斯蒂安·帕斯克·托霍姆

    谢尔盖·扎森科

    西蒙·贝特朗

    西蒙·坦皮埃里

    川部昭一

    舒乔(Shu Cho)

    斯凯·肖

    斯坦尼斯·特伦德伦堡

    斯特凡·亚当斯

    斯特芬·乌尔里奇

    斯蒂芬·库洛

    斯蒂芬·埃斯特·格拉西亚斯

    斯特凡·利特尔

    斯蒂夫·阿特金斯

    宫川达彦

    特伦斯·布兰农

    天农重力

    托马斯·兹纳梅内切克

    都铎·君士坦丁

    乌尔里希·哈贝尔

    高立希

    乌韦·沃尔克

    Veesh Goldman公司

    维亚切斯拉夫·蒂哈诺夫斯基

    维克托·恩格马克

    维利亚姆·普西克

    韦斯·克雷文斯

    威廉·林德利

    雅罗斯拉夫·科尔沙克

    木本由纪(Yuki Kimoto)

    扎克·B·埃利普

    Zoffix Znet公司

版权和许可

版权所有(C)2008-2024,Sebastian Riedel等人。

此程序是自由软件,您可以根据Artistic License 2.0版的条款重新发布和/或修改它。

另请参阅

https://github.com/mojolicious/mojo,Mojolicious::指南,https://mojolicious.org.