[Catalyst] FOREACH problem

Steve H s_t_e_v_e_h at hotmail.com
Mon May 7 01:22:12 GMT 2007


Dmitri,

In answer to your:
>What am I doing wrong?

Cast the hash assignment as an array, otherwise it's scalar and you'd get 
the number of elements in the array instead of the array contents.

@someArray = qw/ 1 2 3 4 /;
%someHash = ();
of the array
##
@{$someHash{key}} = @someArray;
##
use Data::Dumper;
print Dumper(\%someHash);

...nothing wrong with the other solution offerred of using an array ref i.e.
>$c->stash->{categoriesToDelete} = \@categoriesToDelete;

...although, best if you know what was causing your actual problem.


>
>Message: 6
>Date: Sun, 6 May 2007 16:39:23 +0200
>From: "Dmitri Pissarenko" <dmitri.pissarenko at gmail.com>
>Subject: [Catalyst] FOREACH problem
>To: catalyst at lists.rawmode.org
>Message-ID:
>	<e012616b0705060739g7e4f52e4sfdabe3b59beb7a11 at mail.gmail.com>
>Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
>Hello!
>
>I have an action, which should do following:
>
>It reads from the GET parameter a string with record IDs, i. e. "1,2,3,".
>
>Then, this action should fetch from the database the records with these 
>IDs.
>
>Finally, it should pass the resulting array to another page, in which
>these records are displayed using
>
>[% FOREACH cat IN categoriesToDelete -%]
>   <li>[% cat.name %]</li>
>[% END -%]
>
>Now I have the problem that in the page with FOREACH nothing is
>displayed, even though categoriesToDelete contains some data.
>
>The code is this:
>
>sub form_deleteSeveralCategories : Local {
>     my ($self, $c) = @_;
>
>     # fetch IDs as string
>     my $categoryIdsAsSingleString = $c->request->params->{categoryIds};
>
>     # convert string to array of individual IDs
>     my @categoryIds = split (/,/,  $categoryIdsAsSingleString);
>
>     # read records from the database and store them in @categoriesToDelete
>     my @categoriesToDelete = map
>     {
>     	# $_ is the ID of the record
>	    $c->model('TimeTrackingAppDB::Category')->find($_);
>     } @categoryIds;
>
>     foreach (@categoriesToDelete)
>     {
>	    $c->log->debug('cat: ' . $_);
>     };
>
>     # pass the parameters to the page with FOREACH
>     $c->stash->{categoryIds} = $categoryIdsAsSingleString;
####
>     $c->stash->{categoriesToDelete} = @categoriesToDelete;
####
...
> >
> > categoriesToDelete is passed to form_deleteSeveralCategories.tt2 very
> > well, since "[% categoriesToDelete %]" is displayed as "2" (number of
> > elements in the array).
> >
> > But nothing in displayed in the FOREACH loop.
> >
> > What am I doing wrong?
> >

_________________________________________________________________
Advertisement: Looking for a home loan? Compare 2,000 mortgages at RateCity 
http://direct.ninemsn.com.au/adclick/CID=02fd7e1a0000000000000000 




More information about the Catalyst mailing list