[Catalyst] Template Toolkit oddity after upgrading to 5.66
Will Hawes
info at whawes.co.uk
Thu Mar 23 15:37:30 CET 2006
Will Hawes wrote:
> I've just upgraded to Catalyst 5.66 and for some bizarre reason, setting
> $c->stash->{template} = 'template' now causes 'template' to be processed
> immediately, i.e. before forwarding to the view. This is demonstrated by
> controller code similar to the following:
>
> sub edit : Local {
> my ( $self, $c ) = @_;
> my $resultset = $c->stash->{resultset};
> $c->stash->{template} = 'edit';
> die 'ok';
> $self->SUPER::edit( $c );
> }
>
> And in the template:
>
> [%
> WHILE ( item = resultset.next );
> ...
> END;
> %]
>
> I'm using a DBIx::Class based model and use of the
> DBIX_CLASS_STORAGE_DBI_DEBUG environment variable reveals (via the test
> server's debug output) that an SQL SELECT statement is being run for
> each row in the resultset before the die() statement is reached.
>
> The WHERE clause for my resultset is set by $self->SUPER::edit(). In the
> above example, the template code is running before the WHERE clause is
> set and looping over every record in the resultset's table as a result
> (i.e "SELECT * FROM table" as opposed to "SELECT * FROM table WHERE ..." ).
>
> Any ideas as to the cause? The same code did not exhibit this behaviour
> prior to the upgrade.
Solved, turns out it was my crap implementation of end(), which did not
handle $c->error. For some reason this only came to light with 5.66.
Switching to Catalyst::Plugin::DefaultEnd with immediate effect...
More information about the Catalyst
mailing list