From: Sven Schöling Date: Thu, 15 Feb 2018 10:26:15 +0000 (+0100) Subject: Controller::Base::url_for: nur noch fragment erlauben X-Git-Tag: release-3.5.4~457 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=b4e12203b502835ddc31280e41cf3d61e9a42d80;p=kivitendo-erp.git Controller::Base::url_for: nur noch fragment erlauben 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. --- 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.