sub import {
my ( $class, @arguments ) = @_;
my $caller = caller(0);
unless ( $caller->isa('Catalyst') ) {
no strict 'refs';
push @{"$caller\::ISA"}, $class, 'Catalyst::Controller';
}
# snip....
}
<Plugins> <Catalyst>
\ /
MyApp
Catalyst context object
or
use Catalyst qw/FormValidator::Simple FillInForm/;
__PACKAGE__->setup(
do {
my @plugins;
push @plugins, 'StackTrace' if $ENV{CATALYST_DEBUG};
push @plugins, 'Static::Simple'
if ($ENV{CATALYST_ENGINE} || '') =~ /^HTTP/;
return @plugins;
}
);
package Catalyst::Plugin::Dumper;
use strict;
use warnings;
use Data::Dumper;
sub dumper {
my $c = shift;
$c->log->debug( Dumper @_ );
}
1;
$c->dumper( ... );
package Catalyst::Plugin::XFramework;
use strict;
use warnings;
use NEXT;
sub finalize {
my $c = shift;
$c->res->header(
'X-Framework' =>
'Catalyst/'.$c->version);
$c->NEXT::finalize(@_);
}
1;
./script/myapp_create.pl \ model|view|controller \ name [helper] [options]
myapp_create.pl controller Page
MyApp/Controller/Page.pm が作られる。
myapp_create.pl MyHelper myapp_create.pl controller Page MyHelper
package Catalyst::Helper::MyHelper;
use strict;
use warnings;
use File::Spec;
sub mk_stuff {
my ( $self, $helper, @args ) = @_;
$helper->render_file(
'file',
File::Spec->catfile(
$helper->{base}, 'root', 'js', 'prototype.js'
)
);
}
1;
__DATA__
__file__
ここにprototype.js
package Catalyst::Helper::Controller::MyHelper;
use strict;
use warnings;
sub mk_compclass {
my ( $self, $helper, @args ) = @_;
my $file = $helper->{file};
$helper->render_file( 'compclass', $file );
}
1;
__DATA__
__compclass__
package [% class %]
# なんかコード
共通のもの
component class