I'd do what James said - change your template so that the form submits to /edit/:id (e.g. <form action=/edit/42" method="post">), then change your edit route to post '/edit/:id' => sub { ... } That'll handle it nicely, and is a bit more RESTful, too. Also, random comments: In the get route, you load the data straight from a YAML file, but in the post route, you call get_AoH_imagelist() to get it - incomplete refactor, perhaps? When you say: my $data = get_AoH_imagelist(); my @data = @{$data} You could condense that to: my @data = @{ get_AoH_imagelist() }; On Mon, 10 Feb 2014 14:37:29 +0100 Gert van Oss <gertvanoss@me.com> wrote:
Hi,
I’m trying to build a small app to comment on images. Probably I’m almost there but currently stuck with updating a ‘file.yml' by a html-form.
I’ve made two routes (shown below) “get ‘/:id/edit’ for showing the form with the particular image to comment on. When hitting save the ‘post ‘/edit’ will be called. My problem is that the post route doesn’t have the $id initialised. Is there someone around who can tell me how to solve this or point to me what I’m doing wrong?
Thanks, Gert
The structure is an AoH. The file.yml is like
--- - collection: '' description: good id: 0 imgf: photo.jpg tags: '' - collection: '' description: '' etc..
————end of yaml
#--------------------------------------------------------------------- # # get EDIT # #--------------------------------------------------------------------- get '/:id/edit' => sub { my $filename = Dancer::FileUtils::read_file_content( Dancer::FileUtils::path( setting('appdir'), 'myImages.yml' ) ); my $data = from_yaml $filename; my @data = @{$data};
#print Dumper \@data; my $id = param('id'); template 'edit', { data => $data[$id], id => $id, }; };
#--------------------------------------------------------------------- # # post EDIT # #---------------------------------------------------------------------
post '/edit' => sub { my $data = get_AoH_imagelist(); my @data = @{$data}; my $id = param('id'); $data[$id] { description}= params->{description} ; #$data[2] { description}= params->{description} ; # this works but then all descriptions end up in the third group of hashes. my $filename = "myImages.yml"; write_file $filename, to_yaml($data); redirect '/'; };
-- David Precious ("bigpresh") <davidp@preshweb.co.uk> http://www.preshweb.co.uk/ www.preshweb.co.uk/twitter www.preshweb.co.uk/linkedin www.preshweb.co.uk/facebook www.preshweb.co.uk/cpan www.preshweb.co.uk/github