Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision f3978ea1

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

  • ID f3978ea1c30d283b9d46be0766a33c568ade511c
  • Vorgänger dac8a136
  • Nachfolger 18b1b180

SL::{Controller,Presenter}->render: $template kann auch ref auf Instanz von EscapedText sein

Die folgenden Fälle werden nun für $template wie folgt behandelt:

- keine Ref: $tempalte wird als Dateiname interpretiert
- Ref auf einen String (ref eq 'SCALAR'): Zu rendernder String,
direkte Übergabe an Template
- Instanz von EscapedText und Ref auf Instanz von EscapedText: Zu
rendernder String ist der von EscapedText geproxite Text, direkte
Übergabe an Template mit "process => 1" und direktes Zurückgeben mit
"process => 0"

Damit ist es aus Caller-Sicht einfacher, den Aufruf richtig
hinzubekommen:

my $some_result = $self->presenter->grouped_record_list($objects);
  # Don't care whether or not $some_result is already an instance of
  # EscapedText: never treat this as a file name
$self->render(\$some_result, { layout => 0 });

Unterschiede anzeigen:

SL/Controller/Base.pm
80 80
  croak "Unsupported type: " . $options->{type} unless $options->{type} =~ m/^(?:html|js|json)$/;
81 81

  
82 82
  # The "template" argument must be a string or a reference to one.
83
  $template = ${ $template }                                       if ((ref($template) || '') eq 'REF') && (ref(${ $template }) eq 'SL::Presenter::EscapedText');
83 84
  croak "Unsupported 'template' reference type: " . ref($template) if ref($template) && (ref($template) !~ m/^(?:SCALAR|SL::Presenter::EscapedText)$/);
84 85

  
85 86
  # If all output is turned off then don't output the header either.
SL/Presenter.pm
41 41
  croak "Unsupported type: " . $options->{type} unless $options->{type} =~ m/^(?:html|js|json)$/;
42 42

  
43 43
  # The "template" argument must be a string or a reference to one.
44
  $template = ${ $template }                                       if ((ref($template) || '') eq 'REF') && (ref(${ $template }) eq 'SL::Presenter::EscapedText');
44 45
  croak "Unsupported 'template' reference type: " . ref($template) if ref($template) && (ref($template) !~ m/^(?:SCALAR|SL::Presenter::EscapedText)$/);
45 46

  
46 47
  # Look for the file given by $template if $template is not a reference.
......
61 62
  # If no processing is requested then return the content.
62 63
  if (!$options->{process}) {
63 64
    # If $template is a reference then don't try to read a file.
64
    return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if ref $template;
65
    my $ref = ref $template;
66
    return $template                                                                if $ref eq 'SL::Presenter::EscapedText';
67
    return SL::Presenter::EscapedText->new(text => ${ $template }, is_escaped => 1) if $ref eq 'SCALAR';
65 68

  
66 69
    # Otherwise return the file's content.
67 70
    my $file    = IO::File->new($source, "r") || croak("Template file ${source} could not be read");

Auch abrufbar als: Unified diff