Catalyst Advent - Day 9 - YAML, YAML, YAML!
NOTE: This article was written in 2005. In the meantime, Catalyst has switched to using Config::General as the format for its configuration files. YAML files being whitespace-sensitive, copy/pasting from POD often caused problems. See also the Catalyst Wiki (http://dev.catalyst.perl.org/wiki).
When you start a new Catalyst app you configure it directly with __PACKAGE__->config, thats ok for development but admins will hate you when they have to deploy this.
__PACKAGE__->config( name => 'MyApp', 'View::TT' => { EVAL_PERL => 1 } );
You didn't know you could configure your view from the application class, eh? :) Thats possible for every component that inherits from Catalyst::Component or it's subclasses (Catalyst::Base, Catalyst::Controller, Catalyst::View, Catalyst::Model).
__PACKAGE__->config(
name => 'MyApp',
'View::TT' => {
EVAL_PERL => 1
},
'Controller::Foo' => {
fool => 'sri'
}
);
package MyApp::Controller::Foo;
use base 'Catalyst::Controller';
__PACKAGE__->config( lalala => " can't sing!" );
sub default : Private {
my ( $self, $c ) = @_;
$c->res->body( $self->{fool} . $self->{lalala} );
}
But back to the topic, lets make our admins happy with this little idiom.
use YAML ();
__PACKAGE__->config( YAML::LoadFile( __PACKAGE__->path_to('myapp.yml') ) );
The path_to() method is a nice little helper that returns paths relative to the
current application home.
Thats it, now just create a file myapp.yml.
---
name: MyApp
View::TT:
EVAL_PERL: 1
Controller::Foo:
fool: sri
Have fun!
-- sri