2017-12-21 97 views
7

tôi muốn truy cập vào tên template trong Mojolicious từ bên trong mẫu tự cho mục đích gỡ lỗi, trong cùng một cách Mẫu Toolkit không (xem here)Làm cách nào để truy cập tên mẫu hiện tại trong Mojolicious?

Biến __FILE__ công trình gọn gàng nhưng nó đề cập đến hiện tại tệp chứ không phải mẫu cấp cao nhất, có nghĩa là nó vô dụng bên trong mẫu bố cục.

Tôi cũng đã thử

<%= app->renderer->template_name %> 

nhưng không có kết quả

Có thể ở tất cả trong Mojolicious?

+0

Trong https://groups.google.com/forum/#!topic/mojolicious/f1SLFXSGRVk sri đề xuất sử dụng '<% = __FILE__%>'. – simbabque

+1

@simbabque nó không hoạt động nếu được sử dụng trong mẫu trình bao bọc (bố cục) - xem câu hỏi – simone

+0

Sri cũng gọi đó là một đoạn mã trong chuỗi. Có vẻ như họ đã không thực hiện bất cứ điều gì cho phép bạn làm điều đó ngay bây giờ. – simbabque

Trả lời

0

Điều này có thể được thực hiện theo hai cách hơi khác nhau:

Đầu tiên bằng cách thêm móc before_render và đặt biến. Thật dễ dàng để đóng gói tất cả trong một plugin như vậy:

package Mojolicious::Plugin::TemplateName; 

use Mojo::Base 'Mojolicious::Plugin'; 

sub register { 
    my ($self, $app, $conf) = @_; 

    $app->helper('template' => sub { return shift->stash('mojo.template') }); 
    $app->hook(before_render => sub { 
      my $c = shift; 
      $c->stash('mojo.template', $_[0]->{template}) 
      }); 
} 

1; 

và sử dụng nó trong một khuôn mẫu như

<%= template %> 

Thứ hai này, nó có thể được thực hiện bên trong các mẫu - bằng cách thiết lập các biến bên trong mẫu tự:

% stash('template', __FILE__); 

và sau đó tái sử dụng các biến trong cách bố trí:

<%= $template %>   

Trong trường hợp này, bạn nhận được tên tệp có hậu tố và tất cả - không chỉ mẫu.

Lấy cảm hứng từ câu trả lời here về các mẫu được hiển thị từ trong ra ngoài.

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