Re: [Catalyst] access stash outside methods
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: Catalyst@lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/
[Catalyst] access stash outside methods
Hi, I am running catalyst under apache configured with mod_perl. Can I somehow access stash out methods. I want to declare a global variable inside controller and outside methods which will be accessible in all controllers. stash could be a solution but outside methods context object is not available so i don't have access to stash. please help me solve the problem. Thanks, Aditya ___ List: Catalyst@lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] access stash outside methods
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. Thanks, Aditya On 8/21/07, John Napiorkowski [EMAIL PROTECTED] wrote: --- Aditya Verma [EMAIL PROTECTED] wrote: Hi, I am running catalyst under apache configured with mod_perl. Can I somehow access stash out methods. I want to declare a global variable inside controller and outside methods which will be accessible in all controllers. stash could be a solution but outside methods context object is not available so i don't have access to stash. please help me solve the problem. Thanks, Aditya Hi, I may not fully understand your use case, but typically the stash is used for a particular context, not as a global thing. You can alway pass the context to methods that need it. I know it seems cumbersome, but the reason is to make you really think if you need it, the idea being that you should try to decouple your context as much as possible. If you need some global information there are a few ways I can think of: 1) put it into the configuration file. This is great for static stuff, like admin email address, etc. 2) Create a model that provides the information you need. If this information is based on the current context you can inherit from Catalyst::Component::ACCEPT_CONTEXT to build it. 3) Create a base controller with a method that gets the information you need. The have the controllers that need this information inherit from that. You might get the suggestion to make this a catalyst plugin, but that's no longer recommended best practices. Plugins should be reserved for when you are trulying enhancing/extending the basic Catalyst features. Please share with us the details of the use case and maybe we can help. --John Choose the right car based on your needs. Check out Yahoo! Autos new Car Finder tool. http://autos.yahoo.com/carfinder/ ___ List: Catalyst@lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/ ___ List: Catalyst@lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/
Re: [Catalyst] access stash outside methods
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. How about using attributes? pacakge MyApp::Controller::Anything; use base 'MyApp::Controler::HasDescription'; sub some_action :Path :Args(1) :URL('/some_action/*') :Description('Some action!') { # your action } # etc. Those get parsed at startup time, and you can probably shove them in $app-config or somewhere similarly convenient. You can also just walk all actions and look for the URL and Description attributes. This is pretty easy to do, but I don't know the details so I will let you glean them from the code/docs. $c-action_for('/some_action')-attributes should be close. Have fun. Regards, Jonathan Rockway signature.asc Description: OpenPGP digital signature ___ List: Catalyst@lists.rawmode.org Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/ Dev site: http://dev.catalyst.perl.org/