The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Mojolicious::Component - Module-based Template Class

ABSTRACT

Module-based Template Base Class

SYNOPSIS

  package App::Component::Image;

  use Mojo::Base 'Mojolicious::Component';

  has alt => 'random';
  has height => 126;
  has width => 145;
  has src => '/random.gif';

  1;

  # __DATA__
  #
  # @@ component
  #
  # <img
  #   alt="<%= $component->alt %>"
  #   height="<%= $component->height %>"
  #   src="<%= $component->src %>"
  #   width="<%= $component->width %>"
  # />

  package main;

  my $component = App::Component::Image->new;

  # $component->render

DESCRIPTION

This package provides an abstract base class for rendering derived component-based template (partials) classes.

ATTRIBUTES

This package has the following attributes:

controller

  controller(InstanceOf["Mojolicious::Controller"])

This attribute is read-only, accepts (InstanceOf["Mojolicious::Controller"]) values, and is optional.

processor

  processor(InstanceOf["Mojo::Template"])

This attribute is read-only, accepts (InstanceOf["Mojo::Template"]) values, and is optional.

space

  space(InstanceOf["Data::Object::Space"])

This attribute is read-only, accepts (InstanceOf["Data::Object::Space"]) values, and is optional.

METHODS

This package implements the following methods:

postprocess

  postprocess(Str $input) : Str

The postprocess method expects a template string. This method is called automatically after and passed the results of the "preprocess" method, and its results are passed to the "render" method, acting as an after (template loading) hook.

postprocess example #1
  # given: synopsis

  my $processed = $component->postprocess('');
postprocess example #2
  package App::Component::Right::ImageLink;

  use Mojo::Base 'App::Component::Image';

  sub postprocess {
    my ($self, $input) = @_;
    return '<a href="/">' . $input . '</a>';
  }

  package main;

  my $component = App::Component::Right::ImageLink->new;

  my $processed = $component->postprocess($component->template);

preprocess

  preprocess(Str $input) : Str

The preprocess method expects a template string. This method is called automatically before "postprocess", after locating the template in the class hierarchy, acting as a before (template loading) hook.

preprocess example #1
  # given: synopsis

  my $processed = $component->preprocess('');
preprocess example #2
  package App::Component::Left::ImageLink;

  use Mojo::Base 'App::Component::Image';

  sub preprocess {
    my ($self, $input) = @_;
    return '<a href="/">' . $input . '</a>';
  }

  package main;

  my $component = App::Component::Left::ImageLink->new;

  my $processed = $component->preprocess($component->template);

render

  render(Any %args) : Str

The render method loads the component template string data from the DATA section of the component class and renders it using the Mojo::Template object available via "processor".

render example #1
  # given: synopsis

  my $rendered = $component->render;
render example #2
  # given: synopsis

  my $rendered = $component->render(
    readonly => 1,
  );

template

  template(Str | Object $object = $self, Str $section = 'component') : (Any)

The template method is used to load template strings from the DATA section of the class or object specified. The instance invocant will be used if no specific class or object is presented. If an object is provided but no DATA section exists, the object's class hierarchy will be searched returning the first superclass with a matching data section.

template example #1
  # given: synopsis

  my $template = $component->template;
template example #2
  # given: synopsis

  my $template = $component->template('App::Component::Image');
template example #3
  # given: synopsis

  my $template = $component->template(App::Component::Image->new);

variables

  variables(Any %args) : (Any)

The variables method is called automatically during template rendering and its return value, assumed to be key-value pairs, are passed to the template rendering method as template variables. Any key-value pairs passed to the "render" method will be passed to this method making this method, if overridden, the ideal place to set component template variable defaults and/or override existing variables.

variables example #1
  # given: synopsis

  my $variables = {
    $component->variables
  };
variables example #2
  # given: synopsis

  my $variables = {
    $component->variables(true => 1, false => 0)
  };

AUTHOR

Al Newkirk, awncorp@cpan.org

LICENSE

Copyright (C) 2011-2019, Al Newkirk, et al.

This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file".

PROJECT

Wiki

Project

Initiatives

Milestones

Contributing

Issues