Mit mosu darüber gesprochen, und folgende Argumente kamen:
* Es ist unschön dass quasi magische Elemente wie controller, action und
jetzt hash und fragment in einer flachen Argumentliste übergeben
werden. Das ist aber historisch gewachsen und wird jetzt nicht
geändert. Ziel sollte es aber sein, dass potentielle Kollisionen
selten passieren.
* fragemnt ist die offizielle Bezeichnung für den #... Anteil einer URI.
Blöderweise nennt Javascript das document.location.hash, und so ist
das im Gedächtnis geblieben. Da aber hash eh schon in Perl und
Programmieren extrem überladen ist mit Bedeutungen ist fragment hier
der etwas weniger miese Begriff.
my %params = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
my $controller = delete($params{controller}) || $self->controller_name;
my $action = $params{action} || 'dispatch';
- my $fragment = delete $params{hash} // delete $params{fragment} // '';
+ my $fragment = delete $params{fragment};
my $script;
if ($controller =~ m/\.pl$/) {
my $query = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) };
- return "${script}?${query}" . ($fragment ? "#$fragment" : '');
+ return "${script}?${query}" . (defined $fragment ? "#$fragment" : '');
}
sub redirect_to {
The action to call is given by C<$params{action}>. It defaults to
C<dispatch>.
+If C<$params{fragment}> is present, it's used as the fragment of the resulting
+URL.
+
All other key/value pairs in C<%params> are appended as GET parameters
to the URL.