On Jan 22, 2007, at 1:30 PM, John Napiorkowski wrote:
--- Michael Reece <[EMAIL PROTECTED]> wrote:
i am getting intermittent errors (under mod_perl;
Catalyst version
5.7003) from $c->dispatcher->uri_for_action:
Operation "eq": no method found, left argument in
overloaded package
URI::_generic, right argument has no overloaded
magic at /usr/local/
lib/perl5/site_perl/5.8.8/Catalyst/Dispatcher.pm
line 377
sub uri_for_action {
my ( $self, $action, $captures) = @_;
$captures ||= [];
foreach my $dispatch_type ( @{
$self->dispatch_types } ) {
my $uri = $dispatch_type->uri_for_action(
$action, $captures );
return( $uri eq '' ? '/' : $uri ) # line
377
if defined($uri);
}
return undef;
}
i am calling $c->dispatcher->uri_for_action like so:
my $action =
$c->dispatcher->get_action_by_path($path);
unless ($action) {
$c->log->error("uri_to cannot
get_action_by_path($path)");
return undef;
}
my @action_args = (defined $snippets) ?
@$snippets : ();
my $uri =
$c->dispatcher->uri_for_action($action,
@action_args);
unless ($uri) {
$c->log->error("uri_to cannot find
uri_for_action $action");
return undef;
}
any ideas?
---
michael reece :: software engineer ::
[EMAIL PROTECTED]
Hi,
This may not help you at all but I don't think you if
all you want is the URI for a given action that this
is the method to use. Typically I use the $c->uri_for
and controller->action_for methods. This works pretty
well for me.
my $uri =
$c->uri_for($c->controller(xxx)->action_for('action
private name');
If you just need the uri for an action in the current
controller and action you can make it even shorter:
my $uri = $c->uri_for($c->action);
or for a different action in the same controller:
my $uri =
$c->uri_for($c->controller->action_for('action name');
I think there are even easier ways to do this, might
want to search the archives.
Can you give me a few more details about your use case
and setup and then maybe I can understand what the
best way to solve your problem is.
--John
can you tell me where $c->controller->action_for is documented?
http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7006/lib/Catalyst/
Controller.pm is rather blank.
my specific use case here is
my $uri = $c->uri_to('/some/controller/method', @path_args, {%
query_args}, [EMAIL PROTECTED]);
i convert the $path '/some/controller/method' to an action using $c-
>dispatcher->get_action_by_path, and then get the uri for the
$action via $c->dispatcher->uri_for_action as mentioned at
http://search.cpan.org/~mramberg/Catalyst-Runtime-5.7006/lib/
Catalyst.pm#%24c-%3Euri_for(_%24path%2C_%40args%3F%2C_%5C%
25query_values%3F_)
i will take a look at action_for and see if it will do what i want.
looks like i would first have to transform '/some/controller/method'
into 'Some::Controller' + 'method', which would work for most cases,
except when the controller namespace differs from the package
namespace (ie, Controller/Root.pm) .. those contortions are what
makes $c->dispatcher->get_action_by_path attractive, but the question
remains why that sometimes returns $actions (with truthiness) that
cause uri_for_action($action) to die ..
_______________________________________________
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/