Initial Commit
This commit is contained in:
144
database/perl/vendor/lib/DBIx/Class/Manual/Component.pod
vendored
Normal file
144
database/perl/vendor/lib/DBIx/Class/Manual/Component.pod
vendored
Normal file
@@ -0,0 +1,144 @@
|
||||
|
||||
=head1 NAME
|
||||
|
||||
DBIx::Class::Manual::Component - Developing DBIx::Class Components
|
||||
|
||||
=head1 WHAT IS A COMPONENT
|
||||
|
||||
A component is a module that can be added in to your DBIx::Class
|
||||
classes to provide extra functionality. A good example is the PK::Auto
|
||||
component which automatically retrieves primary keys that the database
|
||||
itself creates, after the insert has happened.
|
||||
|
||||
=head1 USING
|
||||
|
||||
Components are loaded using the load_components() method within your
|
||||
DBIx::Class classes.
|
||||
|
||||
package My::Thing;
|
||||
use base qw( DBIx::Class::Core );
|
||||
__PACKAGE__->load_components(qw/InflateColumn::DateTime TimeStamp/);
|
||||
|
||||
Generally you do not want to specify the full package name
|
||||
of a component, instead take off the DBIx::Class:: part of
|
||||
it and just include the rest. If you do want to load a
|
||||
component outside of the normal namespace you can do so
|
||||
by prepending the component name with a +.
|
||||
|
||||
__PACKAGE__->load_components(qw/ +My::Component /);
|
||||
|
||||
Once a component is loaded all of its methods, or otherwise,
|
||||
that it provides will be available in your class.
|
||||
|
||||
The order in which is you load the components may be very
|
||||
important, depending on the component. If you are not sure,
|
||||
then read the docs for the components you are using and see
|
||||
if they mention anything about the order in which you should
|
||||
load them.
|
||||
|
||||
=head1 CREATING COMPONENTS
|
||||
|
||||
Making your own component is very easy.
|
||||
|
||||
package DBIx::Class::MyComp;
|
||||
use base qw(DBIx::Class);
|
||||
# Create methods, accessors, load other components, etc.
|
||||
1;
|
||||
|
||||
When a component is loaded it is included in the calling
|
||||
class' inheritance chain using L<Class::C3>. As well as
|
||||
providing custom utility methods, a component may also
|
||||
override methods provided by other core components, like
|
||||
L<DBIx::Class::Row> and others. For example, you
|
||||
could override the insert and delete methods.
|
||||
|
||||
sub insert {
|
||||
my $self = shift;
|
||||
# Do stuff with $self, like set default values.
|
||||
return $self->next::method( @_ );
|
||||
}
|
||||
|
||||
sub delete {
|
||||
my $self = shift;
|
||||
# Do stuff with $self.
|
||||
return $self->next::method( @_ );
|
||||
}
|
||||
|
||||
Now, the order that a component is loaded is very important. Components
|
||||
that are loaded first are the first ones in the inheritance stack. So, if
|
||||
you override insert() but the DBIx::Class::Row component is loaded first
|
||||
then your insert() will never be called, since the DBIx::Class::Row insert()
|
||||
will be called first. If you are unsure as to why a given method is not
|
||||
being called try printing out the current linearized MRO.
|
||||
|
||||
print join ', ' => mro::get_linear_isa('YourClass::Name');
|
||||
|
||||
=head1 EXISTING COMPONENTS
|
||||
|
||||
=head2 Extra
|
||||
|
||||
These components provide extra functionality beyond
|
||||
basic functionality that you can't live without.
|
||||
|
||||
L<DBIx::Class::CDBICompat> - Class::DBI Compatibility layer.
|
||||
|
||||
L<DBIx::Class::FormTools> - Build forms with multiple interconnected objects.
|
||||
|
||||
L<DBIx::Class::HTMLWidget> - Like FromForm but with DBIx::Class and HTML::Widget.
|
||||
|
||||
L<DBIx::Class::Ordered> - Modify the position of objects in an ordered list.
|
||||
|
||||
L<DBIx::Class::PK::Auto> - Retrieve automatically created primary keys upon insert.
|
||||
|
||||
L<DBIx::Class::QueriesTime> - Display the amount of time it takes to run queries.
|
||||
|
||||
L<DBIx::Class::RandomStringColumns> - Declare virtual columns that return random strings.
|
||||
|
||||
L<DBIx::Class::UUIDColumns> - Implicit UUID columns.
|
||||
|
||||
L<DBIx::Class::WebForm> - CRUD methods.
|
||||
|
||||
=head2 Experimental
|
||||
|
||||
These components are under development, their interfaces may
|
||||
change, they may not work, etc. So, use them if you want, but
|
||||
be warned.
|
||||
|
||||
L<DBIx::Class::Validation> - Validate all data before submitting to your database.
|
||||
|
||||
=head2 Core
|
||||
|
||||
These are the components that all, or nearly all, people will use
|
||||
without even knowing it. These components provide most of
|
||||
DBIx::Class' functionality.
|
||||
|
||||
L<DBIx::Class::Core> - Loads various components that "most people" would want.
|
||||
|
||||
L<DBIx::Class::AccessorGroup> - Lets you build groups of accessors.
|
||||
|
||||
L<DBIx::Class::DB> - Non-recommended classdata schema component.
|
||||
|
||||
L<DBIx::Class::InflateColumn> - Automatically create objects from column data.
|
||||
|
||||
L<DBIx::Class::PK> - This class contains methods for handling primary keys and methods depending on them.
|
||||
|
||||
L<DBIx::Class::Relationship> - Inter-table relationships.
|
||||
|
||||
L<DBIx::Class::ResultSourceProxy::Table> - Provides a classdata table object and method proxies.
|
||||
|
||||
L<DBIx::Class::Row> - Basic row methods.
|
||||
|
||||
=head1 SEE ALSO
|
||||
|
||||
L<DBIx::Class::Manual::Cookbook>
|
||||
|
||||
=head1 FURTHER QUESTIONS?
|
||||
|
||||
Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
|
||||
by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
|
||||
redistribute it and/or modify it under the same terms as the
|
||||
L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
|
||||
Reference in New Issue
Block a user