Mojolicious::Guides - The Mojolicious Guide to the Galaxy

NAME  DON’T PANIC!  BASICS  Learning Perl  Learning Web Technologies  CONVENTIONS  Modern Perl  Signatures  Variable names  TUTORIAL  GUIDES  HIGHLIGHTS  FULL-STACK  API  MORE  SUPPORT 

NAME

Mojolicious::Guides − The Mojolicious Guide to the Galaxy

DON’T PANIC!

The Mojolicious <https://mojolicious.org> documentation is structured into three parts. The "TUTORIAL" everyone starts with, the "GUIDES" that explain all major features in detail, and the "API" reference listing all available classes.

Some parts of the documentation only use the Mojolicious::Lite micro web framework for examples, but that’s merely a convenience for the reader. Almost all features are exactly the same for full Mojolicious applications.

BASICS

Learning Perl

If you are new to Perl, we recommend Learn Perl in 2 hours 30 minutes <https://qntm.org/perl_en> for a quick introduction, or the Modern Perl book <https://pragprog.com/book/swperl/modern-perl-fourth-edition>, freely available in many formats. Both are excellent introductions to the language. For more books and documentation, check out learn.perl.org <https://learn.perl.org/>.

Learning Web Technologies

All web development starts with HTML, CSS and JavaScript, to learn the basics we recommend the Mozilla Developer Network <https://developer.mozilla.org/en-US/docs/Web>. And if you want to know more about how browsers and web servers actually communicate, there’s also a very nice introduction to HTTP <https://developer.mozilla.org/en-US/docs/Web/HTTP>.

CONVENTIONS

Modern Perl

Mojolicious uses a modern subset of Perl exclusively, and therefore all documentation assumes that strict, warnings, utf8 and Perl 5.16 features are enabled, even if examples don’t specifically mention it.

use strict;
use warnings;
use utf8;
use feature ':5.16';

Some modules, like Mojo::Base and Mojolicious::Lite, will enable them for you automatically, whenever they are used.

Signatures

On Perl 5.20+ you can also use the "−signatures" flag with Mojo::Base to enable support for subroutine signatures. Signatures are used in all examples for clarity, even when "−signatures" is omitted for brevity.

Variable names

For brevity and clarity, example variables will reflect the type of data the API uses. For instance, $bytes or $chars to distinguish whether it is encoded bytes or decoded characters in a Perl string, $bool if the value just indicates true or false, $c to denote a Mojolicious::Controller object, or $app to denote the application object.

TUTORIAL

Mojolicious::Guides::Tutorial

A fast and fun way to get started developing web applications with Mojolicious. The tutorial introduces the Mojolicious::Lite micro web framework, which is only a thin wrapper around the full web framework. The simplified notation introduced in the tutorial is commonly used throughout the guides and is therefore considered a prerequisite, you should definitely take a look!

GUIDES

Mojolicious::Guides::Growing

Starting a Mojolicious::Lite prototype from scratch and growing it into a well-structured Mojolicious application.

Mojolicious::Guides::Routing

Simple and fun introduction to the Mojolicious router.

Mojolicious::Guides::Rendering

Generating content with the Mojolicious renderer.

Mojolicious::Guides::Testing

Powerful yet elegant testing techniques and tools for Mojolicious and other web applications.

Mojolicious::Guides::Cookbook

Cooking with Mojolicious, recipes for every taste.

Mojolicious::Guides::Contributing

Become a part of the ongoing Mojolicious development.

Mojolicious::Guides::FAQ

Answers to the most frequently asked questions.

HIGHLIGHTS

Mojolicious and Mojolicious::Lite are the sum of many parts, built on top of the Mojo web development toolkit. Small building blocks that can be used independently for all kinds of applications, these are the most prominent ones.
Mojo::UserAgent

Full featured non-blocking I/O HTTP and WebSocket user agent.

Mojo::DOM

Very fun and minimalistic HTML/XML DOM parser with CSS selector support.

Mojo::JSON

Minimalistic JSON implementation that just works.

Mojo::Server::Daemon

Full featured, highly portable non-blocking I/O HTTP and WebSocket server, with self-restart support through Mojo::Server::Morbo, perfect for development and testing.

Mojo::Server::Prefork

Full featured, UNIX optimized, preforking non-blocking I/O HTTP and WebSocket server with support for zero downtime software upgrades (hot deployment) through Mojo::Server::Hypnotoad.

Mojo::Server::CGI, Mojo::Server::PSGI

Transparent CGI and PSGI support out of the box.

Mojo::IOLoop

A minimalistic event loop with support for multiple reactor backends.

Mojo::Template

Very Perl-ish and minimalistic template system.

Test::Mojo

Testing toolkit for web applications.

ojo

Fun one-liners using everything above.

FULL-STACK

These modules are not part of the Mojolicious distribution, but have been designed to be used with it and are being developed under the same umbrella.
Mojo::Pg

A tiny wrapper around DBD::Pg that makes PostgreSQL <https://www.postgresql.org> a lot of fun to use with Mojolicious. Perform queries blocking and non-blocking, use all SQL features <https://www.postgresql.org/docs/current/static/sql.html> PostgreSQL has to offer, generate CRUD queries from data structures, manage your database schema with migrations and build scalable real-time web applications with the publish/subscribe pattern.

Examples: The minimal chat <https://github.com/mojolicious/mojo-pg/tree/main/examples/chat.pl> application will show you how to scale WebSockets to multiple servers, and the well-structured blog <https://github.com/mojolicious/mojo-pg/tree/main/examples/blog> application how to apply the MVC design pattern in practice.

Minion

A full featured job queue for Mojolicious with support for multiple backends (such as PostgreSQL <https://www.postgresql.org>). Job queues allow you to process time and/or computationally intensive tasks in background processes, outside of the request/response lifecycle. Among those tasks you’ll commonly find image resizing, spam filtering, HTTP downloads, building tarballs, warming caches and basically everything else you can imagine that’s not super fast.

Examples: The link checker <https://github.com/mojolicious/minion/tree/main/examples/linkcheck> will show you how to integrate background jobs into well-structured Mojolicious applications.

API

This is the class hierarchy of the Mojolicious distribution.

Mojo

Mojo::Base

Mojolicious

Mojo::HelloWorld

Mojolicious::Lite

Mojo::Cache

Mojo::Cookie

Mojo::Cookie::Request

Mojo::Cookie::Response

Mojo::DOM::CSS

Mojo::DOM::HTML

Mojo::Date

Mojo::EventEmitter

Mojo::Asset

Mojo::Asset::File

Mojo::Asset::Memory

Mojo::Content

Mojo::Content::MultiPart

Mojo::Content::Single

Mojo::IOLoop

Mojo::IOLoop::Client

Mojo::IOLoop::Server

Mojo::IOLoop::Stream

Mojo::IOLoop::Subprocess

Mojo::IOLoop::TLS

Mojo::Log

Mojo::Message

Mojo::Message::Request

Mojo::Message::Response

Mojo::Reactor

Mojo::Reactor::Poll

Mojo::Reactor::EV

Mojo::Server

Mojo::Server::CGI

Mojo::Server::Daemon

Mojo::Server::Prefork

Mojo::Server::PSGI

Mojo::Transaction

Mojo::Transaction::HTTP

Mojo::Transaction::WebSocket

Mojo::UserAgent

Mojolicious::Plugins

Mojo::Exception

Mojo::Headers

Mojo::JSON::Pointer

Mojo::Parameters

Mojo::Path

Mojo::Promise

Mojo::Server::Hypnotoad

Mojo::Server::Morbo

Mojo::Server::Morbo::Backend

Mojo::Server::Morbo::Backend::Poll

Mojo::Template

Mojo::URL

Mojo::Upload

Mojo::UserAgent::CookieJar

Mojo::UserAgent::Proxy

Mojo::UserAgent::Server

Mojo::UserAgent::Transactor

Mojolicious::Command

Mojolicious::Command::cgi

Mojolicious::Command::daemon

Mojolicious::Command::eval

Mojolicious::Command::get

Mojolicious::Command::prefork

Mojolicious::Command::psgi

Mojolicious::Command::routes

Mojolicious::Command::version

Mojolicious::Command::Author::cpanify

Mojolicious::Command::Author::generate::app

Mojolicious::Command::Author::generate::dockerfile

Mojolicious::Command::Author::generate::lite_app

Mojolicious::Command::Author::generate::makefile

Mojolicious::Command::Author::generate::plugin

Mojolicious::Command::Author::inflate

Mojolicious::Commands

Mojolicious::Command::Author::generate

Mojolicious::Controller

Mojolicious::Plugin

Mojolicious::Plugin::Config

Mojolicious::Plugin::JSONConfig

Mojolicious::Plugin::NotYAMLConfig

Mojolicious::Plugin::DefaultHelpers

Mojolicious::Plugin::EPLRenderer

Mojolicious::Plugin::EPRenderer

Mojolicious::Plugin::HeaderCondition

Mojolicious::Plugin::Mount

Mojolicious::Plugin::TagHelpers

Mojolicious::Renderer

Mojolicious::Routes::Match

Mojolicious::Routes::Pattern

Mojolicious::Routes::Route

Mojolicious::Routes

Mojolicious::Sessions

Mojolicious::Static

Mojolicious::Types

Mojolicious::Validator

Mojolicious::Validator::Validation

Test::Mojo

Mojo::ByteStream

Mojo::Collection

Mojo::DynamicMethods

Mojo::DOM

Mojo::File

Mojo::Home

Mojo::JSON

Mojo::Loader

Mojo::Util

Mojo::WebSocket

ojo

MORE

A lot more documentation and examples by many different authors can be found in the Mojolicious wiki <https://github.com/mojolicious/mojo/wiki>.

SUPPORT

If you have any questions the documentation might not yet answer, don’t hesitate to ask in the Forum <https://forum.mojolicious.org>, on Matrix <https://matrix.to/#/#mojo:matrix.org>, or IRC <https://web.libera.chat/#mojo>.


Updated 2024-01-29 - jenkler.se | uex.se