From b4e12203b502835ddc31280e41cf3d61e9a42d80 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Thu, 15 Feb 2018 11:26:15 +0100 Subject: [PATCH] Controller::Base::url_for: nur noch fragment erlauben MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/Controller/Base.pm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm index d10ba805c..5847b98b5 100644 --- a/SL/Controller/Base.pm +++ b/SL/Controller/Base.pm @@ -29,7 +29,7 @@ sub url_for { 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$/) { @@ -42,7 +42,7 @@ sub url_for { 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 { @@ -529,6 +529,9 @@ L. The action to call is given by C<$params{action}>. It defaults to C. +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. -- 2.20.1