2012-11-08 39 views
9

我有一個使用Mojolicious框架的應用程序。我在數據庫中有一個表,其中包含錯誤響應列表以及與其相關的其他詳細信息。我創建了相應的Result和Resultset來處理數據庫表。還有一個控制器通過與Resultset交互來獲取有關錯誤的詳細信息。如何在Mojolicious的其他控制器中調用動作?

我的想法是在此控制器中調用一個操作,通過查詢數據庫獲取傳遞給它的錯誤信息(由另一個控制器),請求資源的環境的加載運行時信息導致錯誤,創建一個響應並返回給調用它的控制器。

我很困擾從一個控制器到另一個控制器的呼叫。我如何在Mojolicious中做到這一點?我可以通過控制器對象($self)來完成此操作,但有沒有更好的方法來完成此操作,以便將來自調用控制器的錯誤處理響應完全分開?

+0

您可以:'Your :: Controller :: Class :: action($ self)'。你也可以重新使用:'$ other = bless $ self,'Your :: Controller :: Class'; $其它 - >動作()'。但都是huggy –

回答

7

在Mojolicious,你可能會想與助手各地傳遞對象,而創建Mojolicious::Controller出來的:

在主類:

sub startup { 
    my $app = shift; 

    # ... 
    my $thing = Thing->new(foo => 42); 
    $app->helper(thing => sub {$thing}); 
} 

在你的控制器:

sub cool_action { 
    my $c = shift; 

    # ... 
    my $foo = $c->thing->gimmeh_foo('bar'); 
    # ... 
} 

但是,如果您想爲某些操作準備某些內容(例如數據庫),也許under有助於您:

要使用多個嵌套的航線共享代碼,你可以[...]

PS:Mojolicious的此功能以前稱爲橋樑。相應地更新答案。

+0

謝謝你的有用編輯,@Eugen! – memowe

相關問題