Perl Catalyst - 使用href链接到同一站点上的页面时找不到页面

时间:2013-10-17 15:54:51

标签: html perl model-view-controller controller catalyst

我有一个问题我希望有人可以帮助......

我正在创建一个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”并显示“找不到网页”。

我是否需要为forgotpassword页面创建一个Controller?如果是这样,它需要包含什么?或者有什么东西我可以忽略吗?

我是Catalyst的新手,所以非常感谢您的帮助,非常感谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

最后解决了这个问题,感谢'mikew'引用了我关于CPAN菜谱的'服务静态内容'部分。

问题是什么:

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

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

但是,正如CookbookCatalyst::Plugin::Static::Simple

中所述

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

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

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

MyApp->config(
       static => {
           ignore_extensions => [
               qw/tmpl tt tt2 xhtml/
           ],
       },
 );