Revision 7c215391
Von Kivitendo Admin vor mehr als 9 Jahren hinzugefügt
SL/Request.pm | ||
---|---|---|
169 | 169 |
# legacy, some old upload routines expect this to be here |
170 | 170 |
$temp_target->{FILENAME} = $filename if defined $filename; |
171 | 171 |
|
172 |
# name can potentially be both a normal variable or a file upload
|
|
173 |
# a file upload can be identified by its "filename" attribute
|
|
174 |
# the thing is, if a [+] clause vivifies atructur in one of the
|
|
172 |
# Name can potentially be both a normal variable or a file upload.
|
|
173 |
# A file upload can be identified by its "filename" attribute.
|
|
174 |
# The thing is, if a [+] clause vivifies structure in one of the
|
|
175 | 175 |
# branches it must be done in both, or subsequent "[]" will fail |
176 | 176 |
my $temp_target_slot = _store_value($temp_target, $name); |
177 | 177 |
my $target_slot = _store_value($target, $name); |
... | ... | |
286 | 286 |
read STDIN, $content, $ENV{CONTENT_LENGTH}; |
287 | 287 |
if ($ENV{'CONTENT_TYPE'} && $ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/) { |
288 | 288 |
# multipart formdata can bring it's own encoding, so give it both |
289 |
# and let ti decide on it's own
|
|
289 |
# and let it decide on it's own
|
|
290 | 290 |
_parse_multipart_formdata($target, $temp_target, $content, 1); |
291 | 291 |
} else { |
292 | 292 |
# normal encoding must be recoded |
... | ... | |
313 | 313 |
my ($source, $target, $prefix, $in_array) = @_; |
314 | 314 |
$target ||= []; |
315 | 315 |
|
316 |
# there are two edge cases that need attention. first: more than one hash
|
|
317 |
# inside an array. only the first of each nested can have a [+]. second: if
|
|
316 |
# There are two edge cases that need attention. First: more than one hash
|
|
317 |
# inside an array. Only the first of each nested can have a [+]. Second: if
|
|
318 | 318 |
# an array contains mixed values _store_value will rely on autovivification. |
319 |
# so any type change must have a [+]
|
|
320 |
# this closure decides one recursion step AFTER an array has been found if a
|
|
319 |
# So any type change must have a [+]
|
|
320 |
# This closure decides one recursion step AFTER an array has been found if a
|
|
321 | 321 |
# [+] needs to be generated |
322 | 322 |
my $arr_prefix = sub { |
323 | 323 |
return $_[0] ? '[+]' : '[]' if $in_array; |
... | ... | |
373 | 373 |
=head1 SYNOPSIS |
374 | 374 |
|
375 | 375 |
This module handles unpacking of CGI parameters. It also gives |
376 |
information about the request like whether or not it was done via AJAX
|
|
376 |
information about the request, such as whether or not it was done via AJAX,
|
|
377 | 377 |
or the requested content type. |
378 | 378 |
|
379 | 379 |
use SL::Request qw(read_cgi_input); |
... | ... | |
418 | 418 |
|
419 | 419 |
=item Arrays |
420 | 420 |
|
421 |
Arrays will by trailing empty brackets (C<[]>). An hash like this
|
|
421 |
Arrays will be marked by empty brackets (C<[]>). A hash like this
|
|
422 | 422 |
|
423 | 423 |
selected_id => [ 2, 6, 8, 9 ] |
424 | 424 |
|
... | ... | |
439 | 439 |
|
440 | 440 |
=item Nested structures |
441 | 441 |
|
442 |
A special version of this are nested hashs in an array, which is very common. |
|
442 |
A special version of this are nested hashes in an array, which is very common.
|
|
443 | 443 |
The combined operator (C<[].>) will be used. As a special case, every time a new |
444 | 444 |
array slice is started, the special convention (C<[+].>) will be used. Again this |
445 | 445 |
is because it's easy to write a template with it. |
... | ... | |
491 | 491 |
|
492 | 492 |
=item Sparse Arrays |
493 | 493 |
|
494 |
It is not possible to serialize somehing like |
|
494 |
It is not possible to serialize something like
|
|
495 | 495 |
|
496 | 496 |
sparse_array => do { my $sa = []; $sa[100] = 1; $sa }, |
497 | 497 |
|
... | ... | |
522 | 522 |
This function will flatten the provided hash ref into the provided array ref. |
523 | 523 |
The array ref may be non empty, but will be changed in this case. |
524 | 524 |
|
525 |
Return value is the flattened array ref.
|
|
525 |
The return value is the flattened array ref.
|
|
526 | 526 |
|
527 | 527 |
=item C<unflatten ARRAYREF [ HASHREF ]> |
528 | 528 |
|
... | ... | |
540 | 540 |
=item C<layout> |
541 | 541 |
|
542 | 542 |
Set and retrieve the layout object for the current request. Must be an instance |
543 |
of L<SL::Layout::Base>. Defaults to an isntance of L<SL::Layout::None>.
|
|
543 |
of L<SL::Layout::Base>. Defaults to an instance of L<SL::Layout::None>.
|
|
544 | 544 |
|
545 | 545 |
For more information about layouts, see L<SL::Layout::Dispatcher>. |
546 | 546 |
|
... | ... | |
565 | 565 |
|
566 | 566 |
=head2 C<_store_value()> |
567 | 567 |
|
568 |
parses a complex var name, and stores it in the form.
|
|
568 |
Parses a complex var name, and stores it in the form.
|
|
569 | 569 |
|
570 |
syntax:
|
|
570 |
Syntax:
|
|
571 | 571 |
_store_value($target, $key, $value); |
572 | 572 |
|
573 |
keys must start with a string, and can contain various tokens.
|
|
574 |
supported key structures are:
|
|
573 |
Keys must start with a string, and can contain various tokens.
|
|
574 |
Supported key structures are:
|
|
575 | 575 |
|
576 | 576 |
1. simple access |
577 |
simple key strings work as expected
|
|
577 |
Simple key strings work as expected
|
|
578 | 578 |
|
579 | 579 |
id => $form->{id} |
580 | 580 |
|
581 | 581 |
2. hash access. |
582 |
separating two keys by a dot (.) will result in a hash lookup for the inner value
|
|
583 |
this is similar to the behaviour of java and templating mechanisms.
|
|
582 |
Separating two keys by a dot (.) will result in a hash lookup for the inner value
|
|
583 |
This is similar to the behaviour of java and templating mechanisms.
|
|
584 | 584 |
|
585 | 585 |
filter.description => $form->{filter}->{description} |
586 | 586 |
|
587 | 587 |
3. array+hashref access |
588 | 588 |
|
589 |
adding brackets ([]) before the dot will cause the next hash to be put into an array.
|
|
590 |
using [+] instead of [] will force a new array index. this is useful for recurring
|
|
591 |
data structures like part lists. put a [+] into the first varname, and use [] on the
|
|
589 |
Adding brackets ([]) before the dot will cause the next hash to be put into an array.
|
|
590 |
Using [+] instead of [] will force a new array index. This is useful for recurring
|
|
591 |
data structures like part lists. Put a [+] into the first varname, and use [] on the
|
|
592 | 592 |
following ones. |
593 | 593 |
|
594 |
repeating these names in your template:
|
|
594 |
Repeating these names in your template:
|
|
595 | 595 |
|
596 | 596 |
invoice.items[+].id |
597 | 597 |
invoice.items[].parts_id |
... | ... | |
612 | 612 |
|
613 | 613 |
4. arrays |
614 | 614 |
|
615 |
using brackets at the end of a name will result in a pure array to be created.
|
|
616 |
note that you mustn't use [+], which is reserved for array+hash access and will
|
|
615 |
Using brackets at the end of a name will result in the creation of a pure array.
|
|
616 |
Note that you mustn't use [+], which is reserved for array+hash access and will
|
|
617 | 617 |
result in undefined behaviour in array context. |
618 | 618 |
|
619 | 619 |
filter.status[] => $form->{status}->[ val1, val2, ... ] |
Auch abrufbar als: Unified diff
Typos und Kommentare angepasst