On Aug 21, 2007, at 3:48 PM, Aditya Verma wrote:
Hi All,
I want all of my controllers to register there respective URLs with
description. this data will be used in template to create dynamic
HTML pages.
controllers will register URLs at catalyst startup.
I have to store this data into variable (not in any file or
database) which will be accessible in all the controllers.
To get the registration work I have to write statement outside of
all controller methods to execute the same at the time of catalyst
startup.
hope you guys can understand my requirement.
Data that only gets registered at startup like this doesn't belong in
the stash anyway, I usually do this with class data...
package MyApp::Controller;
use base qw( Catalyst::Controller );
__PACKAGE__->mk_classdata( 'url_descriptions' => {} );
sub describe_url {
my ( $self, $url, $description ) = @_;
my $class = ref( $self ) || $self;
$class->url_descriptions->{ $url } = $description;
}
package MyApp::Controller::Root;
use base qw( MyApp::Controller );
__PACKAGE__->describe_url( '/' => 'The Main Page' );
package MyApp::Controller::PageListing;
use base qw( MyApp::Controller );
use Class::Inspector;
sub assemble_url_descriptions {
my ( $self ) = @_;
my %descriptions = ();
for my $class ( Class::Inspector->subclasses( 'MyApp::Controller' ) ) {
while ( my ( $url, $desc ) = each %{ $class->url_descriptions }
) {
$descriptions{ $url } = $desc;
}
}
return \%descriptions;
}
--
Jason Kohles
[EMAIL PROTECTED]
http://www.jasonkohles.com/
"A witty saying proves nothing." -- Voltaire
_______________________________________________
List: [email protected]
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/