2012-11-08 42 views
9

Tôi có một ứng dụng sử dụng khung công tác Mojolicious. Tôi có một bảng trong cơ sở dữ liệu có danh sách phản hồi lỗi và các chi tiết bổ sung liên quan đến nó. Tôi đã tạo ra Result và Resultet tương ứng để làm việc với bảng DB. Ngoài ra còn có một bộ điều khiển để có được thông tin chi tiết về lỗi bằng cách tương tác với Resultet.Làm thế nào để gọi hành động trong một số bộ điều khiển khác trong Mojolicious?

Ý tưởng của tôi là gọi một hành động trong bộ điều khiển này sẽ nhận được thông tin chi tiết về lỗi được chuyển tới nó (bởi bộ điều khiển khác) bằng cách truy vấn cơ sở dữ liệu, thêm thông tin thời gian chạy về môi trường được yêu cầu cho tài nguyên dẫn đến lỗi, tạo ra một phản hồi và quay lại bộ điều khiển gọi nó.

Tôi đang vật lộn với cuộc gọi từ bộ điều khiển này sang bộ điều khiển khác. Làm thế nào để tôi làm điều đó trong Mojolicious? Tôi có thể vượt qua đối tượng điều khiển ($self) để thực hiện điều này, nhưng là có một cách tốt hơn để làm điều đó, để tôi tách hoàn toàn lỗi của tôi xử lý phản ứng từ bộ điều khiển gọi điện thoại?

+0

Bạn có thể: 'Your :: Controller :: Class :: action ($ self)'. Ngoài ra bạn có thể không trả lại: '$ other = bless $ self, 'Your :: Controller :: Class'; $ other-> action() '. Nhưng cả hai đều ôm nhau –

Trả lời

7

Trong Mojolicious, bạn có lẽ sẽ muốn vượt qua đối tượng xung quanh với một helper mà không tạo Mojolicious::Controller ra khỏi nó:

Trong lớp học chính của bạn:

sub startup { 
    my $app = shift; 

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

Trong điều khiển của bạn:

sub cool_action { 
    my $c = shift; 

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

Tuy nhiên, nếu bạn muốn chuẩn bị thứ gì đó (ví dụ: cơ sở dữ liệu) cho một số hành động, có thể under là hữu ích cho bạn:

Để chia sẻ mã với nhiều tuyến đường lồng nhau bạn có thể [...]

PS: Tính năng này của Mojolicious được trước đây có tên Bridges. Trả lời được cập nhật tương ứng.

+0

Cảm ơn bạn đã chỉnh sửa hữu ích, @Eugen! – memowe

Các vấn đề liên quan