Revision f3978ea1
Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt
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
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: