Mojolicous-技巧积累

什么是 .html.ep 文件

其为 Mojolicious Web 框架中的模板文件,用于生成包含HTML内容的动态Web页面。

在Mojolicious框架中,”.ep”文件扩展名表示这是一个Mojolicious Embedded Perl(Mojolicious EP)模板文件,其中包含了Perl代码和HTML代码。这些模板文件使用Mojolicious的模板引擎来渲染动态内容。

.html.ep 文件中,Perl代码可以访问Mojolicious框架中的各种变量和对象,例如请求参数、路由信息、会话数据等。通过使用这些变量和对象,可以动态地生成HTML内容,并将其呈现给客户端浏览器。

__DATA__ 标记和 @@ 标记的作用

__DATA__ 是Perl语言中的一个特殊标记,用于在程序中嵌入数据。在使用 __DATA__ 标记后,程序中的任何内容都将被视为数据,直到文件结束或遇到 __END__ 标记为止。

@@ 开头的代码块通常是模板文件。模板文件包含了动态生成HTML内容的代码,可以使用Mojolicious的模板引擎来渲染模板并生成最终的HTML内容。

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
__DATA__

@@ index.html.ep
% layout 'default';
%= form_for index => begin
% if (param 'user') {
<b>Wrong name or password, please try again.</b><br>
% }
Name:<br>
%= text_field 'user'
<br>Password:<br>
%= password_field 'pass'
<br>
%= submit_button 'Login'
% end

模板文件的编写格式

Mojolicious 的模板文件使用 Ep (Embedded Perl) 文本格式编写,Ep 是一种简单的文本模板语言,它使用Perl语法和标记来生成HTML、XML、JSON等文本格式.

其以 .html.ep, .json.ep 等作为文件扩展名.

<% %> 标记包含 Perl 代码块.

<%= %> 标记输出 Perl 表达式的结果.

<%# %> 标记注释模板文件中的内容.

<% layout 'default' %> 来标记定义模板文件的布局.

<%= link_to 'text', 'url' %> 标记生成链接.

<%= $var %> 标记输出 Perl 变量的值.

示例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<title><%= $title %></title>
</head>
<body>
<h1><%= $title %></h1>
<% if ($name) { %>
<p>Hello <%= $name %>!</p>
<% } else { %>
<p>Hello, world!</p>
<% } %>
<%= link_to 'Go to Home', '/' %>
</body>
</html>

在模板文件中使用 $c 对象的值

通过 $c 对象的 stash 属性来访问控制器中的变量。在控制器中,可以使用 stash 方法将变量传递到模板中。例如:

1
2
3
4
get '/' => sub ($c) {
$c->stash(test => 10);
$c->render('index', format => 'html');
};

在模板文件中,可以使用 $c->stash->{test} 来访问 test 变量, 如下所示:

1
2
3
4
5
@@ index.html.ep
% layout 'default';
% title 'Welcome';
<h1>Welcome to the Mojolicious real-time web framework!</h1>
This is <%= $c->stash->{test} %> a single line

这将在模板文件中使用控制器中定义的 test 变量.

注意, 需要在 render 之前设置好 stash 的值.

关于 $c->render() 的调用次数

在同一个路由匹配中, 只能调用一次 render() 方法.

Mojolicious 项目目录结构

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.
├── blog.yml
├── lib
│ ├── blog
│ │ └── Controller
│ │ └── Example.pm
│ └── blog.pm
├── public
│ ├── assets
│ └── index.html
├── script
│ └── blog
├── t
│ └── basic.t
└── templates
├── example
│ └── welcome.html.ep
└── layouts
└── default.html.ep

其中:

  • blog.yml: 项目的配置文件,用于存储项目的配置信息,例如数据库连接信息、路由配置等。
  • lib/: 存储项目的 Perl 模块。在这个例子中,blog.pm 是应用程序的主要入口点,Controller/Example.pm 是一个控制器模块,用于处理来自客户端的请求。
  • public/: 存储静态文件,例如 CSS、JavaScript、图像等。这些文件可以直接由客户端访问,而不需要经过 Mojolicious 应用程序。
  • script/: 存储一些辅助脚本,例如启动应用程序的脚本。
  • t/: 存储测试文件,用于测试应用程序的各种功能和行为。
  • templates/: 存储应用程序的模板文件,用于生成 HTML 页面。在这个例子中,layouts 目录存储应用程序的布局模板,example 目录存储一个示例模板,用于显示欢迎消息

关于 app->start()

app 是一个函数调用, 用于创建一个 Mojolicious 应用程序对象, 这里相当于是, 用返回的这个对象来调用 start 方法.

注意端口的改变, app->start('-l', 'http://*:8080'), 需要用 ./script 这样运行才会改变, morbo script 仍然是 3000 端口.


Mojolicous-技巧积累
http://example.com/2023/05/17/Mojolicous-技巧积累/
作者
Jie
发布于
2023年5月17日
许可协议