Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b4e12203

Von Sven Schöling vor fast 7 Jahren hinzugefügt

  • ID b4e12203b502835ddc31280e41cf3d61e9a42d80
  • Vorgänger fc9548f8
  • Nachfolger 00c3a0ed

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.

Unterschiede anzeigen:

SL/Controller/Base.pm
29 29
  my %params      = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_;
30 30
  my $controller  = delete($params{controller}) || $self->controller_name;
31 31
  my $action      = $params{action}             || 'dispatch';
32
  my $fragment    = delete $params{hash} // delete $params{fragment} // '';
32
  my $fragment    = delete $params{fragment};
33 33

  
34 34
  my $script;
35 35
  if ($controller =~ m/\.pl$/) {
......
42 42

  
43 43
  my $query       = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) };
44 44

  
45
  return "${script}?${query}" . ($fragment ? "#$fragment" : '');
45
  return "${script}?${query}" . (defined $fragment ? "#$fragment" : '');
46 46
}
47 47

  
48 48
sub redirect_to {
......
529 529
The action to call is given by C<$params{action}>. It defaults to
530 530
C<dispatch>.
531 531

  
532
If C<$params{fragment}> is present, it's used as the fragment of the resulting
533
URL.
534

  
532 535
All other key/value pairs in C<%params> are appended as GET parameters
533 536
to the URL.
534 537

  

Auch abrufbar als: Unified diff