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

问题描述 投票:2回答: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根目录/ login.html文件中(以及所有其他类似按钮的位),我有以下代码段应允许我链接到“忘记密码” html页面。

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

它正在引用的根目录/ forgotpassword.html文件包含以下内容:

<!DOCTYPE html>
<html>
<body>

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

</body>
</html>

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

我需要为忘记密码页面创建一个控制器吗?如果是这样,它将需要包含哪些内容?还是有什么明显的我在忽略?

我是Catalyst的新手。

html perl model-view-controller controller catalyst
2个回答
2
投票

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


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文件中添加以下内容,以确保删除不需要的扩展名被忽略(在我的情况下是html文件)。

MyApp->config(
       static => {
           ignore_extensions => [
               qw/tmpl tt tt2 xhtml/
           ],
       },
 );
© www.soinside.com 2019 - 2024. All rights reserved.