2

我正在创建一个 Catalyst 应用程序,目前我有一个简单的登录页面,其中还包含一个“忘记密码”链接。一切正常,除了当我点击“忘记密码”链接时,它应该带我进入一个全新的 html 页面,其中只包含“不幸,你应该记住它”的字样。相反,我收到“找不到页面”错误。

我在做什么:

我有一个名为Login.pm的控制器,其中包含以下内容:

 sub default : Private {
    my ( $self, $c ) = @_;
    $c->forward('login');
 }

 sub login : Path('/login') {   
    my ( $self, $c ) = @_;

    $c->stash->{title} = "Login page";
    $c->stash->{page} = "html";
    $c->stash->{template} = "login.html";
 }

以上所有内容都可以正常工作并生成登录页面。

在 Catalyst root/ login.html文件(以及所有其他位,如按钮)中,我有以下一段代码,应该允许我链接到“忘记密码”html 页面。

<p><a href="forgotpassword.html">Forgot Password?</a></p>

它引用的 root/ forgotpassword.html文件包含以下内容:

<!DOCTYPE html>
<html>
<body>

<h1>Unlucky, you should have remembered it</h1>

</body>
</html>

但是,当我单击登录页面上的“忘记密码”链接时,它会转到“mydomainname/forgotpassword.html”并显示“找不到页面”。

我需要为忘记密码页面创建控制器吗?如果是这样,它需要包含什么?或者有什么明显的我忽略了?

我是催化剂的新手。

4

2 回答 2

3

终于解决了这个问题,感谢 'mikew' 将我推荐给 CPAN 食谱的“提供静态内容”部分。

问题是什么:

使用下面的 html5 代码,我引用了一个不需要与 Catalyst 交互即可工作的简单html页面。

<p><a href="forgotpassword.html">Forgot Password?</a></p>

但是,正如CookbookCatalyst::Plugin::Static::Simple中所述

“默认情况下,不提供以下扩展名(即,它们将由 Catalyst 处理):tmpl、tt、tt2、html、xhtml。”

“有些文件类型您可能不希望用作静态文件。此类别中最重要的是您的原始模板文件。默认情况下,静态文件将忽略扩展名为 tmpl、tt、tt2、html 和 xhtml 的文件: : 为了安全起见简单。”

为防止出现“找不到页面”错误(因为默认情况下会忽略 html 页面),您需要将以下内容添加到MyApp.pm文件中,确保删除您不想被忽略的扩展名(在我的案例 html 文件)。

MyApp->config(
       static => {
           ignore_extensions => [
               qw/tmpl tt tt2 xhtml/
           ],
       },
 );
于 2013-10-18T09:01:43.167 回答
2

我相信您要做的是确保静态提供该文件。查看说明书以确保您已配置为提供静态文件,而不是通过催化剂发送该请求。

于 2013-10-17T16:32:19.787 回答