Mojolicious::Static

Section: User Contributed Perl Documentation (3pm)
Updated: 2022-12-22
Index Return to Main Contents
 

NAME

Mojolicious::Static - Serve static files  

SYNOPSIS

  use Mojolicious::Static;

  my $static = Mojolicious::Static->new;
  push @{$static->classes}, 'MyApp::Controller::Foo';
  push @{$static->paths}, '/home/sri/public';

 

DESCRIPTION

Mojolicious::Static is a static file server with "Range", "If-Modified-Since" and "If-None-Match" support, based on RFC 7232 <https://tools.ietf.org/html/rfc7232> and RFC 7233 <https://tools.ietf.org/html/rfc7233>.  

ATTRIBUTES

Mojolicious::Static implements the following attributes.  

asset_dir

  my $dir = $static->asset_dir;
  $static = $static->asset_dir('assets');

Subdirectory used for all static assets, defaults to "assets".  

classes

  my $classes = $static->classes;
  $static     = $static->classes(['main']);

Classes to use for finding files in "DATA" sections with Mojo::Loader, first one has the highest precedence, defaults to "main". Only files with exactly one extension will be used, like "index.html". Note that for files to be detected, these classes need to have already been loaded and added before ``warmup'' is called, which usually happens automatically during application startup.

  # Add another class with static files in DATA section
  push @{$static->classes}, 'Mojolicious::Plugin::Fun';

  # Add another class with static files in DATA section and higher precedence
  unshift @{$static->classes}, 'Mojolicious::Plugin::MoreFun';

 

extra

  my $extra = $static->extra;
  $static   = $static->extra({'foo/bar.txt' => '/home/sri/myapp/bar.txt'});

Paths for extra files to be served from locations other than ``paths'', such as the images used by the built-in exception and not found pages. Note that extra files are only served if no better alternative could be found in ``paths'' and ``classes''.

  # Remove built-in favicon
  delete $static->extra->{'favicon.ico'};

 

paths

  my $paths = $static->paths;
  $static   = $static->paths(['/home/sri/public']);

Directories to serve static files from, first one has the highest precedence.

  # Add another "public" directory
  push @{$static->paths}, '/home/sri/public';

  # Add another "public" directory with higher precedence
  unshift @{$static->paths}, '/home/sri/themes/blue/public';

 

METHODS

Mojolicious::Static inherits all methods from Mojo::Base and implements the following new ones.  

asset_path

  my $path = $static->asset_path('/app.js');

Get static asset path.  

dispatch

  my $bool = $static->dispatch(Mojolicious::Controller->new);

Serve static file for Mojolicious::Controller object.  

file

  my $asset = $static->file('images/logo.png');
  my $asset = $static->file('../lib/MyApp.pm');

Build Mojo::Asset::File or Mojo::Asset::Memory object for a file, relative to ``paths'' or from ``classes'', or return "undef" if it doesn't exist. Note that this method uses a relative path, but does not protect from traversing to parent directories.

  my $content = $static->file('foo/bar.html')->slurp;

 

is_fresh

  my $bool = $static->is_fresh(Mojolicious::Controller->new, {etag => 'abc'});
  my $bool = $static->is_fresh(
    Mojolicious::Controller->new, {etag => 'W/"def"'});

Check freshness of request by comparing the "If-None-Match" and "If-Modified-Since" request headers to the "ETag" and "Last-Modified" response headers.

These options are currently available:

etag
  etag => 'abc'
  etag => 'W/"abc"'

Add "ETag" header before comparing.

last_modified
  last_modified => $epoch

Add "Last-Modified" header before comparing.

 

serve

  my $bool = $static->serve(Mojolicious::Controller->new, 'images/logo.png');
  my $bool = $static->serve(Mojolicious::Controller->new, '../lib/MyApp.pm');

Serve a specific file, relative to ``paths'' or from ``classes''. Note that this method uses a relative path, but does not protect from traversing to parent directories.  

serve_asset

  $static->serve_asset(Mojolicious::Controller->new, Mojo::Asset::File->new);

Serve a Mojo::Asset::File or Mojo::Asset::Memory object with "Range", "If-Modified-Since" and "If-None-Match" support.  

warmup

  $static->warmup();

Prepare static files from ``classes'' and static assets for future use.  

SEE ALSO

Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.


 

Index

NAME
SYNOPSIS
DESCRIPTION
ATTRIBUTES
asset_dir
classes
extra
paths
METHODS
asset_path
dispatch
file
is_fresh
serve
serve_asset
warmup
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 20:16:25 GMT, April 26, 2024