2016-03-01 75 views
2

我在路由中有一些奇怪的結果。在Mojolicious中找不到控制器

參考碼在PDNController.pm

my $r = $self->routes; 

    my $auth = $r->under('/' => sub { 
    my $self = shift ; 
    $self->redirect_to('/login') and return undef unless ($self->is_user_authenticated); 
    return 1; 
    }); 

    $r->get('/login')->to('login#index'); 

    $r->post('/login')->to('login#auth'); 

    $r->get('/logout')->to('login#logout'); 

    $auth->get('/')->to('index#index'); 

    $auth->get('/vlan')->to('vlan#index'); 

    $auth->get('/api/vlan/add')->to('vlan#add'); 

PDNController /控制器/ VLAN.pm

package PDNController::Controller::VLAN; 
use Mojo::Base 'Mojolicious::Controller'; 

sub index { 
    my $self = shift; 
    $self->render(); 
} 

sub add { 
    my $self = shift; 
    my %h; 
    $h{error} = ''; 
    $self->res->headers->add('Access-Control-Allow-Origin' => '*'); 
    $self->render(json => {%h}}); 
} 


1; 

除了/ API/VLAN從這個例子所有路線參考代碼/添加工作正常,但最後我有一個錯誤

[Tue Mar 1 16:54:02 2016] [debug] GET "/api/vlan/add" 
[Tue Mar 1 16:54:02 2016] [debug] Routing to a callback 
[Tue Mar 1 16:54:02 2016] [debug] Controller "PDNController::Vlan" does not exist 
[Tue Mar 1 16:54:02 2016] [debug] Template "vlan/add.html.ep" not found 
[Tue Mar 1 16:54:02 2016] [debug] Template "not_found.development.html.ep" not found 
[Tue Mar 1 16:54:02 2016] [debug] Template "not_found.html.ep" not found 
[Tue Mar 1 16:54:02 2016] [debug] Rendering template "mojo/debug.html.ep" 
[Tue Mar 1 16:54:02 2016] [debug] Rendering template "mojo/menubar.html.ep" 
[Tue Mar 1 16:54:02 2016] [debug] 404 Not Found (0.052532s, 19.036/s) 

爲什麼控制器名稱PDNController :: Vlan而不是PDNController :: Controller :: Vlan?

Mojolicious 6.51

+0

我很抱歉,但/ vlan不起作用。只有工作路線是/,/登錄,/註銷 –

+0

我發現錯誤。控制器的名稱錯誤。 pm文件結束與VLAN,但必須Vlan :)虛擬,虛擬,虛擬:) –

回答

3

你的控制器名稱爲PDNController::Controller::VLAN,但你的路線說:

$auth->get('/vlan')->to('vlan#index'); 

這意味着你正在尋找控制器PDNController::Controller::Vlan(控制器,名稱由變更爲INITCAP Mojolicious),這顯然不存在。

沒有針對此兩種解決方案:

  1. 更改您的控制器名稱PDNController::Controller::VLANPDNController::Controller::Vlan和控制器目錄下的文件Vlan.pm
  2. 或將路線更改爲下方。

    $auth->get('/vlan')->to('VLAN#index');

爲什麼控制器名稱PDNController :: VLAN,並沒有 PDNController ::控制器::的Vlan

PDNController::Vlan錯誤消息指向控制器PDNController::Controller::Vlan。該錯誤消息旨在讓您更清晰。

當它說Controller "PDNController::Vlan"這意味着它是控制器的PDNController應用程序的Vlan(您的應用程序的所有控制器駐留在Controller目錄中),即它說的是PDNController::Controller::Vlan