[Catalyst] More progress... Now dealing with form processing,
and handling input data... seems to disappear before hitting the method
Joe Landman
landman at scalableinformatics.com
Wed Dec 28 19:20:57 CET 2005
Allrighty... got it working ... I think I get it now.
Would the Catalyst folks like a blow-by-blow writeup and howto for
people who are not used to DBIx:Class and other methods?
Might help newbies...
Joe
Joe Landman wrote:
> Following Andreas' advice, the dump of the all now displays!
>
> What I did is add (to the main application module)
>
> sub end : Private {
> my ( $self, $c ) = @_;
> $c->forward('test::View::Mason');
> }
>
> Good. Now modify the list method in the test::Controller::db.pm
>
> sub list : Local {
> use Data::Dumper;
> my ( $self, $c ) = @_;
> my (@all);
> @all = test::Model::Database::Testing->search();
> $c->stash->{stuff}=Dumper(@all);
> push @{$c->stash->{data}}, at all;
> $c->stash->{template}="test.html";
> $c->forward( 'test::View::Mason');
> }
>
> so that $c->stash->{data} has the stuff I want to display in the view,
> and then modify the view so that it does something with the incoming
> data ...
>
> <%args>
> $stuff => undef
> $data => undef
> </%args>
> % use Data::Dumper;
> % my ($k,$string,$dump,$maxid);
> % $dump = Dumper($data);
> % $maxid=-10;
> in Test.html: Dumping....<br />
> <hr />
> <pre>
> <% $stuff %>
> </pre>
> <hr />
> <!-- Dump of data = <% $dump %> -->
> <pre>
> % foreach (@{$data})
> % {
> % $string = undef;
> % if ($maxid < $_->{_column_data}->{id}) { $maxid =
> $_->{_column_data}->{id}; }
> % foreach $k (keys %{$_->{_column_data}})
> % {
> % $string .= sprintf "| %s ",$_->{_column_data}->{$k};
> % }
> <% $string %>
> % }
> </pre>
>
> and we get (ignoring the dump)
>
> | a | 1 | b
> | c | 2 | d
> | d | 3 | e
>
> which is exactly what I wanted.
>
> Great!
>
> So to mix it up, now I want to add a tiny form at the end of this to add
> another row to the database. So I appended
>
> <form action="add" method="post">
> Name: <input type="text" name="name" value="" size=40 /> <br />
> Size: <input type="text" name="size" value="" size=40 /> <br />
> ID: <input type="text" name="id" value="<% $maxid+1 %>" size=40
> /> <br />
> <input type="submit" value="submit">
> </form>
>
> to the test.html, and created an add method in test::Controller::db.pm
>
> sub add : Local {
> my ( $self, $c ) = @_;
> my (@all,%all2);
> %all2 =$c->parameters;
> $c->stash->{stuff}=Dumper(\%all2);
> $c->stash->{template}="test.html";
> $c->forward( 'test::View::Mason');
> }
>
> The idea is that $c->{parameters} is a hash of the incoming posted
> parameters.
>
> Unfortunately, it seems to get lost somewhere. I see it in the debug
> messages on the console
>
>
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug]
> **********************************
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] * Request 1 (0.250/s)
> [26826]
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug]
> **********************************
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] Body Parameters are:
> .---------------------------------------+--------------------------------------.
>
> | Key | Value |
> +---------------------------------------+--------------------------------------+
>
> | id | 4 |
> | name | asdasdasd |
> | size | asdasdasda |
> '---------------------------------------+--------------------------------------'
>
>
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] "POST" request for
> "db/add" from "192.168.1.32"
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] Path is "db/add"
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] Rendering component
> "/test.html"
> [Wed Dec 28 15:29:37 2005] [catalyst] [debug] Rendering component
> "/test.html"
> [Wed Dec 28 15:29:37 2005] [catalyst] [info] Request took 0.018545s
> (53.923/s)
> .------------------------------------------------------------------+-----------.
>
> | Action |
> Time |
> +------------------------------------------------------------------+-----------+
>
> | -> test::View::Mason->process |
> 0.002368s |
> | /db/add |
> 0.002898s |
> | -> test::View::Mason->process |
> 0.000978s |
> | /end |
> 0.001180s |
> '------------------------------------------------------------------+-----------'
>
>
>
> but it does not show up in the method call. Is there some magic I need
> to do here? I will look back over the Agave and other examples.
> Somewhat confused here. Is there any way to force the debug screen even
> on successful calls?
>
> Joe
>
>
> Andreas Marienborg wrote:
>> I saw your other post, but figured I would comment some bits :)
>>
>>
>> On 28. des. 2005, at 07.46, Joe Landman wrote:
>>
>>> I added a simple global list method to the db controller
>>>
>>> sub list : Global {
>>> use Data::Dumper;
>>> my ( $self, $c ) = @_;
>>> my (@all);
>>> @all = test::Model::Database::Testing->search();
>>> $c->forward( 'test::View::Mason');
>>
>> put this in the 'sub end : Private { } of your base application, so
>> you dont have to do it for each controller you write :P This also
>> ensures that everything you put in the stash is visible upon rendering.
>>
>> You can also check out the DefaultEnd plugin, which is a grand idea :)
>>
>>> $c->stash->{stuff}=Dumper(@all);
>>
>>> }
>>>
>>
>
--
Joseph Landman, Ph.D
Founder and CEO
Scalable Informatics LLC,
email: landman at scalableinformatics.com
web : http://www.scalableinformatics.com
phone: +1 734 786 8423
fax : +1 734 786 8452
cell : +1 734 612 4615
More information about the Catalyst
mailing list