0

我正在创建一个 Catalyst 应用程序,目前我有一个简单的登录页面,可以通过以下网址访问:

http://mydomainname/login

这完美地工作,它获取 html 页面并使用它引用的 css 文件创建一个漂亮的登录页面。

但是,如果我也转到以下网址:

http://mydomainname/login/login

我创建的登录页面仍然显示,除了这次它只显示基本按钮、文本框等,没有 css,因为它似乎没有访问 css 文件进行样式设置。

这种情况一直发生在“登录”路径中:

例如。

http://mydomainname/login/login
http://mydomainname/login/login/login
http://mydomainname/login/login/login/login/login

等等...

我想要的显然是http://mydomainname/login/login不工作或重定向到http://mydomainname/login例如。

我是我的 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->{pagetype} = "html";
        $c->stash->{template} = "login.html";
}

首先,这是控制器的外观吗?以及我需要做些什么来防止这种双 url 路径问题的发生(例如http://mydomainname/login/loginhttp://mydomainname/login/login/login/login)。

4

2 回答 2

0

明确地说不应该有参数:

sub login :Path('/login') :Args(0) {

那么控制器将不匹配/login/etc/etc/etc

于 2013-10-18T11:53:58.273 回答
0

第一个/login是从控制器名称匹配的,第二个/login是从动作名称(子)匹配的。

您要么需要将整个loginsub 移动到您的 Root 控制器中,要么将其逻辑移动到现有的default处理程序中。就个人而言,我更喜欢将登录和注销等操作放入 Root 控制器中。他们不太可能有其他任何东西与他们联系或依赖于他们。Login.pm 是否还有其他操作或方法?

缺少 CSS 样式可能是 login.html 中的相对路径问题,或者是主程序中静态资源的配置问题。您应该能够使用浏览器的开发工具调试该工具。

于 2013-10-20T22:44:52.707 回答