所有请求的Perl Dancer index.cgi

时间:2014-03-30 07:21:23

标签: perl dancer

我正在尝试在第一个应用程序中使用Perl Dancer模块。第一个应用程序创建了一个名为MyWeb-App / bin / app.pl的文件,其中包含以下代码:

use Dancer;
use MyWeb::App;
dance;

,名为MyWeb-App / lib / MyWeb / App.pm的文件包含以下代码:

package MyWeb::App;
use Dancer ':syntax';

our $VERSION = '0.1';

get '/' => sub {
    template 'index';
};

true;

我只想要一个index.cgi文件来处理我的所有应用程序请求。我的问题是, 我是否必须将所有操作/方法放在相同的MyWeb-App / bin / app.pl文件和模块中 对于MyWeb-App / lib / MyWeb / App.pm模块等每个操作/方法。

原因是我的应用程序将包含数百个这样的操作:

get 'register' => sub {...};
post 'save_register' => sub {...};
get 'contactus' => sub {...};
post 'save_contactus' => sub {...};
.....
get 'order' => sub {...};
post 'process_order' => sub {...};

所以我必须将所有这样的操作放在一个主index.cgi中,每次为应用程序添加新操作或新模块时都必须修改此文件。

简而言之,如何以模块化方式使用大量操作的应用程序,因此每个操作在一个模块文件中以便于维护,但其他开发人员可以向应用程序添加单独的模块,而不会重叠/损坏主index.cgi。< / p>

在我的常规无框架应用程序中,我只根据路由/操作加载模块,因此每个操作每个路径只加载一个模块,其逻辑如下:

if ($route eq "register") { eval "use register.pm"; register(); }

elsif ($route eq "save_register") { eval "use register.pm"; save_register(); }
....
....
elsif ($route eq "contactus") { eval "use contactus.pm"; contactus(); }

1 个答案:

答案 0 :(得分:3)

&#39;的index.cgi&#39;在Perl Dancer中不使用。

该框架旨在将您的应用程序分解为一堆逻辑模块。以有意义的方式对它们进行分组。例如,对于带有照片的论坛应用程序,您可能会有一个&#34;用户&#34;模块,&#34;消息&#34;模块和&#34;照片&#34;模块。

在app.pl中,您将拥有:

 use Dancer;
 use MyWeb::Users;
 use MyWeb::Messages;
 use MyWeb::Photos;
 dance;

然后,您将在./lib中创建3个不同的.pm文件,比如users.pm,messages,pm,photos.pm等,然后包含每个模块的相关路由。您的路线可能以/ user / ,/ message / 和/ photo / *开头。例如,POST / user,GET / user等。考虑使用前缀函数。

这可以使您的项目易于管理,并且您的路线也很有条理。随着项目的增长和添加更多模块,您只需修改app.pl并包含新模块(和路由)。