]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Controller::Base::url_for: nur noch fragment erlauben
authorSven Schöling <s.schoeling@linet-services.de>
Thu, 15 Feb 2018 10:26:15 +0000 (11:26 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Thu, 15 Feb 2018 10:26:15 +0000 (11:26 +0100)
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

index d10ba805ce3bcdf0506f82b1854e86b5d587ce0c..5847b98b5fd9e9b2840ecb86062d212e810be497 100644 (file)
@@ -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</controller_name>.
 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.