How can I deny a DB access in a view?
Here is an example code. DBIx::Tracer can hook the DB access in a lexical context.
package MyApp::Web; use DBIx::Tracer; sub render { my ($c, $tmpl, $vars) = @_; my $tracer = $ENV{IN_DEBUGGING} ? DBIx::Tracer->new( sub { my %args = @_; my $sql = $args{sql}; die "Do not execute query in a view: $sql"; } ) : undef; return $c->SUPER::render($tmpl, $vars); }
Why do I need to deny it?
- Designer can execute a lot of queries.
- It makes debugging hard.
- It makes NYTProf hard.