NAME
Yancy::Guides::Model - Building modules for your application's business logic
VERSION
version 1.075
DESCRIPTION
This guide describes how to extend Yancy::Model to add custom business logic.
Model Classes
There are three types of classes in Yancy::Model
:
- Model
-
The model class represents the entire database and contains schemas.
- Schema
-
Schema classes represent individual tables, views, or collections and contain items.
- Item
-
Item classes represent individual records from the database.
Create a Model
To create your model, extend the Yancy::Model class.
package MyApp::Model;
use Mojo::Base 'Yancy::Model', -signatures;
Make sure to add your namespace to the "namespaces" in Yancy::Model array:
unshift @{ $model->namespaces }, 'MyApp';
Your model class should include methods for the most common data lookups:
sub get_user( $self, $id ) {
return $self->schema( 'user' )->get( $id );
}
Your model class should also store configuration needed by the other classes:
# Invitation e-mails come from this address
has email_from => 'no-reply@example.com';
Create a Schema
To create a schema class, extend Yancy::Model::Schema. The name of the schema class should be the camel-cased version of the schema's name.
package MyApp::Schema::User;
use Mojo::Base 'Yancy::Model::Schema', -signatures;
The schema class should contain methods that work on the collection: Creating new items, searching for items.
# Invite a new user
sub invite( $self, $email ) {
my $id = $self->create({ email => $email });
$self->get( $id )->send_invite_mail;
return $id;
}
Create an Item
To create an item class, extend Yancy::Model::Item. The name of the item class should be the camel-cased version of the schema's name.
package MyApp::Item::User;
use Mojo::Base 'Yancy::Model::Item', -signatures;
The item class should contain methods that work on individual records.
# Send the invite mail to this user
sub send_invite_mail( $self ) {
my $to = $self->data->{email};
my $from = $self->model->email_from;
# TODO: Send e-mail
}
SEE ALSO
AUTHOR
Doug Bell <preaction@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2021 by Doug Bell.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.