所以,我是个白痴……我已经很久没看过CGI::App
了,但我觉得我对它有如此大的把握,以至于我忽略了明显的步骤:看说明书!
特别是,有一系列方法可用于根据您的特定需求定制CGI:App
,其中包括cgiapp_init()
、cgiapp_prerun()
和cgiapp_postrun()
。
- cgiapp_init()用于执行特定于应用程序的初始化行为,并在
setup()
方法之前立即调用。它可用于从其他地方加载设置;如果仅从其他模块继承的超类调用它,它将为所有模块提供通用设置。 - cgiapp_prerun()在选定的运行模式之前立即调用。如果它仅由您的超类调用,您可以执行诸如授权甚至表单验证之类的项目;这将成为您所有应用程序的标准。(例如,您可以使用
$self->prerun_mode('mode')
调用来覆盖所选的运行模式,从而允许您在不允许用户的情况下重定向到不同的模式.) - cgiapp_postrun()在运行模式返回其输出之后,但在生成http标头或将任何内容发送到网络浏览器之前调用。同样,如果在超类中定义,则意味着您可以将运行模式输出放置在更大模板中的特定位置,甚至调用其他例程来填充主模板的其他部分。您甚至可以检查某些参数是否已传递到页面,并更改您发回的输出类型(XML、PDF、图像等),从而允许您拥有一个更改输出类型的通用查询元素(例如,’print’返回PDF或精简模板的参数)。
此外,您可以在超类中指定您正在使用CGI::Simple
作为查询对象(使用cgiapp_get_query
方法),或者您可以重写load_tmpl()
方法使用Template::Toolkit
或其他模板系统等
看起来不再那么疯狂了……