FAQ
Hi,

I need some advice about an old 5.7 plugin that I came across at a
client site. The plugin wraps CGI::Expand to deal with hierarchical
parameters (see expand_cgi export in CGI::Expand docs).

They want to migrate the app to 5.8 and this plugin was doing some
nasty stuff - monkeypatching Catalyst::Request like this:

package Catalyst::Request;
__PACKAGE__->mk_accessors('hparams');

This is of course a no-no with CatMoose.

Reading through the docs, I see that I can subclass the
Catalyst::Request class and use the $c->request_class to setup the new
one. I've done that like this:

package My::Request;

use Moose;

BEGIN { extends 'Catalyst::Request' }

has hparams => (
isa => 'HashRef',
is => 'rw',
default => sub { {} },
);

no Moose;
__PACKAGE__->meta->make_immutable;

1;

I have two questions:

* is it possible for a plugin, at setup time, to set the
request_class()?
* is there a better way?

Best regards,

Search Discussions

  • Florian Ragwitz at Aug 21, 2009 at 11:10 am

    On Fri, Aug 21, 2009 at 11:37:00AM +0100, Pedro Melo wrote:
    Reading through the docs, I see that I can subclass the
    Catalyst::Request class and use the $c->request_class to setup the new
    one. I've done that like this:
    It's probably better to create a role to apply to the request class and,
    optionally, use CatalystX::RoleApplicator to apply it.

    See Catalyst::TraitFor::Request::BrowserDetect for an example.
    * is it possible for a plugin, at setup time, to set the
    request_class()?
    Yes. See Catalyst::Plugin::Browser for that.
    * is there a better way?
    Other than not doing it and using CX::RoleApplicator instead? None that
    i've found so far.


    --
    BOFH excuse #383:
    Your processor has taken a ride to Heaven's Gate on the UFO behind
    Hale-Bopp's comet.
    -------------- next part --------------
    A non-text attachment was scrubbed...
    Name: not available
    Type: application/pgp-signature
    Size: 189 bytes
    Desc: Digital signature
    Url : http://lists.scsys.co.uk/pipermail/catalyst/attachments/20090821/452e5d44/attachment.pgp
  • Tomas Doran at Aug 21, 2009 at 4:26 pm

    Pedro Melo wrote:
    * is it possible for a plugin, at setup time, to set the request_class()?
    Yes.

    before setup_finalize => sub { my $self = shift;
    $self->request_class("New::Request::Class"); };
    * is there a better way?
    Yes. Make a request class role, then use CatalystX::RoleApplicator
    to apply it to the request class.

    See Catalyst::Plugin::Browser for an example of it being used in a plugin.

    Cheers
    t0m

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupcatalyst @
categoriescatalyst, perl
postedAug 21, '09 at 10:37a
activeAug 21, '09 at 4:26p
posts3
users3
websitecatalystframework.org
irc#catalyst

People

Translate

site design / logo © 2022 Grokbase