1 package SL::Controller::Base;
3 use parent qw(Rose::Object);
5 use List::Util qw(first);
7 sub parse_html_template {
11 return $::form->parse_html_template($name, { @_, SELF => $self });
17 return $_[0] if scalar(@_) == 1;
20 my $controller = delete($params{controller}) || $self->_controller_name;
21 my $action = delete($params{action}) || 'dispatch';
22 $params{action} = "${controller}/${action}";
23 my $query = join('&', map { $::form->escape($_) . '=' . $::form->escape($params{$_}) } keys %params);
25 return "controller.pl?${query}";
30 my $action = "action_" . shift;
32 return $self->_dispatch(@_) if $action eq 'action_dispatch';
34 $::form->error("Invalid action ${action} for controller " . ref($self)) if !$self->can($action);
38 sub _controller_name {
39 return (split(/::/, ref($_[0])))[-1];
45 my @actions = grep { m/^action_/ } keys %{ ref($self) . "::" };
46 my $action = first { $::form->{$_} } @actions;