2017-12-21 7 views
7

Ich möchte den Namen der Vorlage in Mojolicious zugreifen aus dem Inneren der Vorlage selbst für Debugging-Zwecke, auf die gleiche Art und Weise wird das Template ToolkitWie kann ich auf den aktuellen Vorlagennamen in Mojolicious zugreifen?

Die variablen __FILE__ Werke ordentlich (here sehen), aber es bezieht sich auf die aktuelle Datei und nicht auf der obersten Ebene Vorlage, was bedeutet, dass es innerhalb einer Layoutvorlage nutzlos ist.

Ich habe auch versucht,

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

aber kein Ergebnis

Ist es überhaupt möglich, in Mojolicious?

Zuerst durch Zugabe eines before_render Haken und Einstellen einer Variable:

+0

In https://groups.google.com/forum/#!topic/mojolicious/f1SLFXSGRVk empfiehlt sri, '<% = __FILE__%>' zu verwenden. – simbabque

+1

@simbabque es funktioniert nicht, wenn in einem Wrapper-Template (Layout) verwendet - siehe die Frage – simone

+0

Sri ruft auch dies einen Code Geruch im Thread zu tun. Es scheint, dass sie nichts implementiert haben, was es Ihnen erlaubt, es jetzt zu tun. – simbabque

Antwort

0

Dies kann auf zwei leicht unterschiedliche Weise erfolgen. Es ist einfach, das alles in einem Plugin zu packen wie so:

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; 

und verwenden Sie es innerhalb einer Vorlage wie diese

<%= template %> 

Zweitens kann es in den Vorlagen erfolgen - durch die Variable in der Einstellung Vorlage selbst:

% stash('template', __FILE__); 

und dann wiederverwendet die Variable im Layout:

<%= $template %>   

In diesem Fall erhalten Sie den Dateinamen mit Suffix und alle - nicht nur die Vorlage.

Inspiriert von der Antwort here über Vorlagen, die inside-out gerendert werden.

Verwandte Themen